X02第二天笔记与答案(爆肝2个小时)
2024-08-03 13:16:45
发布于:广东
什么是枚举?
枚举(英语:Enumerate)是基于已有知识来猜测答案的一种问题求解策略。
枚举的思想是不断地猜测,从可能的集合中一一尝试,然后再判断题目的条件是否成立。
给出解空间
建立简洁的数学模型。
枚举的时候要想清楚:可能的情况是什么?要枚举哪些要素?
接下来就是激动人心的例题啦!
百钱买百鸡
//代码如下
#include<bits/stdc++.h>
using namespace std;
int main(){
for(int i=0;i<=20;i++){
for(int j=0;j<=34;j++){
for(int z=0;z<=100;z++){
if(i+j+z==100&&z%3==0&&i*5+j*3+z/3==100){
cout<<i<<" "<<j<<" "<<z<<endl;
}
}
}
}
return 0;
}
注解:<<endl 可改成'\n';
接下来是经典例题
希望大家多练一下下!
接下来是例题二
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,sum=0;
cin>>n;
for(int i=0;i<=n/7;i++){
int j=(n-7*i)/4;
if((n-7*i)%4==0&&(n-i-j)%3==0)
sum++;
}
cout<<sum;
return 0;
}
接下来将解着道题目啦!
先打出基本框架
#include<bits/stdc++.h>//万能头
using namespace std;//没有的话cin,cout都要加std:: 例如: std::cin>>变量名;
int main(){
return 0;//可有可无
}
讲解:
依题目给出的变量名n,代表我有n枚money;
在定义一个sum定义有多少种买法;//记住一定要定义sum=0;
接下来从0开始遍历;
遍历到n/7;
再进行判断//具体原因不想写bra
接下来是代码时间:
T20334.小蚂蚁吃米
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+9;
int a[maxn],pre[maxn];
int main(){
int n,q,l,r;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]; pre[i]=pre[i-1]+a[i];
}
cin>>q;
while(q--){
cin>>l>>r;
cout<<pre[r]-pre[l-1]<<endl;
}
return 0;
}
T20332.输出素数个数
由于代码过长不变截图,直接上代码:
#include<bits/stdc++.h>
using namespace std;
bool flag[100000001];
int main()
{
memset (flag, false, sizeof(flag));
int n;
scanf ("%d", &n);
int ans = n - 1;
for (int i = 2; i * i <= n; i++)
if (!flag[i])
{
for (int j = 2; i * j <= n; j++)
if (!flag[i * j])
{
flag[i * j] = true;
ans--;
}
}
printf ("%d\n", ans);
return 0;
}//false 可改成0;
T20333.输出素数个数2
#include<bits/stdc++.h>
using namespace std;
int n,pri[50000005]={},cnt=0;
int main(){
scanf("%d",&n);
for(int i=2;i<=n;i++){
if(pri[i])continue;
for(int j=i+i;j<=n;j+=i)pri[j]=1;
}
for(int i=2;i<=n;i++)if(!pri[i])cnt++;
printf("%d",cnt);
return 0;
}
T20335.输出素数个数3
#include <bits/stdc++.h>
using namespace std;
constexpr int N=100000005;
bitset<N+5>kun;
int solve(int n)
{
int cnt=0;
for(int i=2;i<=n;i++){
if(kun[i]==1)continue;
for(int j=i*i;j<=n;j+=i)kun[j]=1;
cnt++;
}
return cnt;
}
int main()
{
int n;
cin>>n;
cout<<solve(n);
}
T20331.找钱
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,sum=0;
scanf("%d",&n);
for(int i=0;i<=n/5;i++){
for(int j=0;j<=n/2;j++){
for(int w=0;w<=n;w++){
if(i*5+j*2+w==n){
sum++;
}
}
}
}
printf("%d",sum);
return 0;
}
T20337.找钱2
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,sum=0;
scanf("%d",&n);
for(int i=0;i<=n/5;i++){
for(int j=0;j<=n/2;j++){
int w=n-(i*5)-(j*2);
if(i*5+j*2+w==n&&w>=0){
sum++;
}
}
}
printf("%d",sum);
return 0;
}
作者制作不易:点个赞再走吧!求求了🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏
我和“City of Hackers”的小伙伴都在ACGO等你,快用这个专属链接加入我们吧!
我团人数到达 50 就更新 day3,day4 的讲解
全部评论 6
我看完直接懵了,我们X01上课上的是X01难度的,考试考的咋是X02例题?(百钱买百鸡那些考试都考过,老吸太“良心”了)
2024-09-07 来自 广东
0而且怎么没有区间筛?(
2024-08-03 来自 湖南
0前面我好像讲过区间筛和欧拉筛
2024-08-03 来自 广东
0bra
2024-08-03 来自 广东
0在哪?
2024-08-03 来自 湖南
0
百钱百鸡不直接打表?(
2024-08-03 来自 湖南
0也可以不打表的
2024-08-03 来自 广东
0打表费时间
2024-08-03 来自 广东
0O(1)
2024-08-03 来自 广东
0
我和“City of Hackers”的小伙伴都在ACGO等你,快用这个专属链接加入我们吧!
我团人数到达 50 就更新 day3,day4 的讲解2024-08-03 来自 广东
0我和“City of Hackers”的小伙伴都在ACGO等你,快用这个专属链接加入我们吧!https://www.acgo.cn/application/1786225240849158144
2024-08-03 来自 广东
0求求点个赞再走吧!!
2024-08-03 来自 广东
0
有帮助,赞一个