Codeforces Round #276 (Div. 2)

A. Factory

题意:给出a,m,第一天的总量为a,需要生产为a%m,第二天的总量为a+a%m,需要生产(a+a%m)%m 计算到哪一天a%m==0为止

自己做的时候,把i开到1000来循环就过了,后来搜题解发现这样过了是运气好

应该这样理解:a大于m的时候没有意义,当a%m重复出现的时候,说明出现了循环,终止计算。

 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring>  
 4 #include<algorithm>  
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int i,sum=0,ans=0,x,m,flag=0;
10     scanf("%d %d",&x,&m);
11     for(i=1;i<=1000;i++)
12     {
13         sum=x;
14         ans=x%m;
15         if(ans==0) 
16         {
17             flag=1;
18             break;
19         }
20         x=sum+ans;
21     //    printf("x=%d
",x);
22     }
23     if(flag) printf("Yes
");
24     else printf("No
");
25 }
View Code

补-------------------

B. Valuable Resources

题意:给出n个坐标,求能够覆盖这n个坐标的最小的正方形的面积

将这n个点的坐标排序后,正方形的边长为ans=max(a[n]-a[1],b[n]-b[1])

 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring>  
 4 #include<algorithm>  
 5 using namespace std;
 6 
 7 int a[1005],b[1005];
 8  long long area;
 9 
10 int main()
11 {
12     int i,j,n;
13     long long ans1,ans2;
14     scanf("%d",&n);
15     for(i=0;i<n;i++)
16     {
17         cin>>a[i]>>b[i];
18     }
19     sort(a,a+n);
20     sort(b,b+n);
21     
22     ans1=a[n-1]-a[0];
23     ans2=b[n-1]-b[0];
24     long long t=max(ans1,ans2);
25     printf("%I64d
",t*t);    
26 }
View Code


 

C. Bits

题意:给出n,n对数l,r,找出一个数x使得x满足,l<=x<=r,且转换成二进制之后,构成x的1是最多的。

将l从最低位开始填1,直到>=r为止,这样能够保证组成x的1最多

 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring> 
 4 #include <cmath>   
 5 #include<algorithm>  
 6 using namespace std;
 7 
 8 typedef long long LL;
 9 
10 int main()
11 {
12     int n;
13     LL l,r;
14     scanf("%d",&n);
15     while(n--)
16     {
17         scanf("%I64d %I64d",&l,&r);
18         for(int i=0;i<63;i++)
19             if((l|(1LL<<i))<=r) l|=(1LL<<i);
20             
21             printf("%I64d
",l);
22     }
23 }
View Code
原文地址:https://www.cnblogs.com/wuyuewoniu/p/4308751.html