A. Factory
题意:给出a,m,第一天的总量为a,需要生产为a%m,第二天的总量为a+a%m,需要生产(a+a%m)%m 计算到哪一天a%m==0为止
自己做的时候,把i开到1000来循环就过了,后来搜题解发现这样过了是运气好
应该这样理解:a大于m的时候没有意义,当a%m重复出现的时候,说明出现了循环,终止计算。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int main()
{
int i,sum=,ans=,x,m,flag=;
scanf("%d %d",&x,&m);
for(i=;i<=;i++)
{
sum=x;
ans=x%m;
if(ans==)
{
flag=;
break;
}
x=sum+ans;
// printf("x=%d\n",x);
}
if(flag) printf("Yes\n");
else printf("No\n");
}
补-------------------
B. Valuable Resources
题意:给出n个坐标,求能够覆盖这n个坐标的最小的正方形的面积
将这n个点的坐标排序后,正方形的边长为ans=max(a[n]-a[1],b[n]-b[1])
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int a[],b[];
long long area; int main()
{
int i,j,n;
long long ans1,ans2;
scanf("%d",&n);
for(i=;i<n;i++)
{
cin>>a[i]>>b[i];
}
sort(a,a+n);
sort(b,b+n); ans1=a[n-]-a[];
ans2=b[n-]-b[];
long long t=max(ans1,ans2);
printf("%I64d\n",t*t);
}
C. Bits
题意:给出n,n对数l,r,找出一个数x使得x满足,l<=x<=r,且转换成二进制之后,构成x的1是最多的。
将l从最低位开始填1,直到>=r为止,这样能够保证组成x的1最多
#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<algorithm>
using namespace std; typedef long long LL; int main()
{
int n;
LL l,r;
scanf("%d",&n);
while(n--)
{
scanf("%I64d %I64d",&l,&r);
for(int i=;i<;i++)
if((l|(1LL<<i))<=r) l|=(1LL<<i); printf("%I64d\n",l);
}
}