Codeforces Round #229

390 A. Inna and Alarm Clock

http://codeforces.com/contest/390/problem/A

水题一枚,两个set就可完成

 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 }
View Code

390 B. Inna, Dima and Song

 

http://codeforces.com/contest/390/problem/B

同样也很水,两数之和相等的情况之下,要使两个数的乘积比较大,只要保证两个靠的比较近就行了,即(sum/2)*(sum-sum/2)

 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 }
View Code

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作为右边界即可

 

代码:

 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 }
View Code

 

 

posted @ 2014-02-16 09:34  悠悠我心。  阅读(250)  评论(0编辑  收藏  举报