zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    No.1
    JS二叉树的操作
    JS实现快排
    BOM中的各种height
    innerHTML outerHTML innerText value 区别
    【转载】JS中DOM操作汇总
    【转载】轻松理解JS闭包
    【转载】JavaScript模块入门
    【转载】JavaScript模块简介
    【转载】浏览器缓存详解:expires cache-control last-modified
  • 原文地址:https://www.cnblogs.com/zhanzhao/p/3551125.html
Copyright © 2011-2022 走看看