390 A. Inna and Alarm Clock
http://codeforces.com/contest/390/problem/A
水题一枚,两个set就可完成
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<string.h> 3 #include<set> 4 using namespace std; 5 6 set<int>s1,s2; 7 8 int main() 9 { 10 int n,a,b; 11 while(cin>>n) 12 { 13 s1.clear(); 14 s2.clear(); 15 while(n--) 16 { 17 cin>>a>>b; 18 s1.insert(a); 19 s2.insert(b); 20 } 21 int mm=s1.size(); 22 int nn=s2.size(); 23 cout<<min(mm,nn)<<endl; 24 } 25 return 0; 26 }
390 B. Inna, Dima and Song
http://codeforces.com/contest/390/problem/B
同样也很水,两数之和相等的情况之下,要使两个数的乘积比较大,只要保证两个靠的比较近就行了,即(sum/2)*(sum-sum/2)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<string.h> 3 #include<set> 4 #include<stdio.h> 5 using namespace std; 6 7 long long int a[100001],b[100001]; 8 9 int main() 10 { 11 long long int n,i; 12 while(cin>>n) 13 { 14 for(i=0;i<n;i++) 15 cin>>a[i]; 16 for(i=0;i<n;i++) 17 cin>>b[i]; 18 long long int sum=0; 19 for(i=0;i<n;i++) 20 { 21 if(a[i]+a[i]<b[i]||b[i]==1) 22 sum-=1; 23 else 24 { 25 long long int mm=b[i]/2; 26 long long int nn=b[i]-mm; 27 sum+=mm*nn; 28 } 29 } 30 cout<<sum<<endl; 31 } 32 return 0; 33 }
390 C. Inna and Candy Boxes
http://codeforces.com/contest/390/problem/C
这个题蛮有结题报告的价值的
题意:
给定一个长度N的01串S,再给一个整数K。
然后有W个询问,每个询问给一对整数L和R,问对原串在[L,R]这个区间上要修改多少个位置使得在L+K-1,L+2K-1,L+3K-1,...,R都是1,而其它位置都是0。题目保证R-L+1能够被K整除。
对于一次询问,首先求出原串中对应区间上1的个数X,和落在指定位置上1的个数Y,以及指定位置的个数Z。
由于题目中已经给出 r-l+1为k的整数倍 所以 给出左边界 l 那么第一个数一定为(l+k-1)由于做减法运算 所以不能包含这个点 所以 只要把给的l边界l-1即可
对于右边界 一定是k 所以直接用r作为右边界即可
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<string.h> 3 #include<stdio.h> 4 using namespace std; 5 6 const int maxn=100005; 7 8 int a[11][maxn]; 9 10 int sum[maxn]; 11 12 int main() 13 { 14 string s; 15 16 int n,k,w; 17 freopen("aa.txt","r",stdin); 18 while(cin>>n>>k>>w) 19 { 20 cin>>s; 21 22 int l=s.length(); 23 sum[0]=0; 24 25 for(int i=0;i<l;i++) 26 { 27 int j=i+1; 28 sum[j]=sum[i]+(s[i]-'0'); 29 if(j>k) 30 a[j%k][j]=a[j%k][j-k]+(s[i]=='1'?-1:1); 31 else 32 a[j%k][j]=(s[i]=='1'?-1:1); 33 } 34 int aa,bb; 35 36 while(w--) 37 { 38 cin>>aa>>bb; 39 int sun=sum[bb]-sum[aa-1]; 40 aa--; 41 int sux=a[bb%k][bb]-a[aa%k][aa]; 42 cout<<sun+sux<<endl; 43 } 44 } 45 return 0; 46 }