• Codeforces Round #276 (Div. 2) 解题报告


    题目地址http://codeforces.com/contest/485

    A题.Factory

    模拟。判断是否出现循环,如果出现,肯定不可能。

    代码:

     1 #include<cstdio>
     2 #include<stdbool.h>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int a,m;
     9     int flag[100003]={0};
    10    
    11    scanf("%d%d",&a,&m); 
    12     while(true) {
    13     
    14         if(a%m==0){
    15             printf("Yes
    ");
    16             return 0;
    17         }
    18         if(flag[a]==1) {
    19             printf("No
    ");
    20             return 0;
    21         }
    22         flag[a]=1;
    23         a=(a+a)%m;
    24     }
    25     
    26     return 0;
    27 }

    B题:Valuable Resources

    找出横纵坐标的最大最小值,然后求最小面积。

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<iostream>
     4 
     5 const int INF=(int)1e9+3511;
     6 
     7 using namespace std;
     8 
     9 int main()
    10 {
    11     int n,x,y,maxx=-INF,maxy=-INF,minx=INF,miny=INF;
    12     
    13     scanf("%d",&n);
    14     while(n--) {
    15         scanf("%d%d",&x,&y);
    16         maxx=max(maxx,x);
    17         minx=min(minx,x);
    18         maxy=max(maxy,y);
    19         miny=min(miny,y);
    20     }
    21     
    22     int  len;
    23     len=max((maxx-minx),(maxy-miny)); 
    24     cout<<(long long )len*len<<endl;    
    25     return 0;
    26 }

    C题:Bits

    位运算。给定一个区间[L,R],问在本区间内哪个整数的二进制1的数量最多,有多个解输出最小数。

    要求二进制的1尽量多,还要求尽量小,运用位运算从低位开始把0变成1。

    从左边界开始,从低位向高位按位或(0变成1,1也还是1),直到比R大停止,输出前一个(即比R小的最后一个数)。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<iostream>
     5 
     6 #define LL  long long
     7 
     8 using namespace std;
     9 
    10 int main()
    11 {
    12     int n;
    13     LL l,r,t,p;
    14     
    15     scanf("%d",&n);
    16     while(n--) {
    17         p=1;
    18         cin>>l>>r;
    19         for(int i=1;i<64;i++) {
    20             t=l|p;
    21             if(t>r) break;
    22             p<<=1; l=t;
    23         }
    24         cout<<l<<endl;
    25     }
    26     
    27     return 0;
    28 }

    D题:Maximum Value

    考虑到可能会出现大量相同的数,所以先排序,去掉相同的数,重新建立数列b[i]。

    对于x来说,在k*x~(k+1)*x这段范围内,余数最大的肯定是最接近(k+1)*x的数。枚举每个数的倍数,并不断更新即可。数列有序,可以通过二分查找最接近(k+1)*x的数。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 
     5 const int N=2e5+3511;
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     int i,j,n,a[N],b[N],p,ans,val;
    11     
    12     scanf("%d",&n);
    13     for(int i=1;i<=n;i++) {
    14         scanf("%d",&a[i]);
    15     }
    16     
    17     sort(a+1,a+n+1);
    18     b[p=1]=a[1];
    19     for(int i=2;i<=n;i++) {
    20         if(a[i]!=a[i-1]) b[++p]=a[i];
    21     }
    22     
    23     ans=0;
    24     for(int i=1;i<p;i++) {
    25         int val=b[i],j=i;
    26         while(j<=p) {
    27             val+=b[i];
    28             j=lower_bound(b+1,b+p+1,val)-b;
    29             ans=max(ans,b[j-1]%b[i]);
    30         }
    31        
    32     }
    33     
    34     printf("%d
    ",ans);
    35     return 0;
    36 }
  • 相关阅读:
    Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2
    网站状态保存方法
    学习MVC第一课:初识MVC
    ASP.NET MVC 中动态从路由中获取URL
    ASP.NET MVC2程序开发入门到精通系列课程01
    OpenCV 里的sigma 是多少
    日期大小比较
    安装完ODAC,出现ORA12560:TNS:协议适配器错误
    Spring+IBATIS+Struts2开发流程
    【转】SSH标准配置
  • 原文地址:https://www.cnblogs.com/sxiszero/p/4103002.html
Copyright © 2020-2023  润新知