P1161
#include<bits/stdc++.h>
using namespace std;
const int N=2000002;//const int 后面的值不能变
int flag[N];
int main(){
memset(flag,0,sizeof(flag));//将flag全部赋予0,此行可有可无
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
double a;
int t;
scanf("%lf %d",&a,&t);
for(int j=1;j<=t;j++){
int index=int(a*j);
flag[index]=!flag[index];//相反操作
}
}
for(int i=1; ;i++){
if(flag[i]){//判断是否和之前的值一样
printf("%d\n",i);
break;//直接结束
}
}
return 0;
}
P2141
此题注意判断两个数的和是否有重复的,以及两个数的和是否在取值范围内
将两个数加和的最大值进行列举 并判断是否在范围内成立则让计数器加1;
P1614
#include<bits/stdc++.h>
using namespace std;
int a[30002];
int s[30002];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
s[i]=s[i-1]+a[i];//进行计算前缀和
}
int mi=10000000;
for(int i=m;i<=n;i++){
int temp=s[i]-s[i-m];
if(temp<mi) mi=temp;//判断大小
}
printf("%d\n",mi);//输出
return 0;
}
本题主要应用前缀和的计算
P1554 P2550
因为需要输出许多数,所以可以将其放进一个数组进行输出
例如以下格式
for(int i=0;i<=9;i++) printf("%d ",a[i]);