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 }
补-------------------
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 }
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 }