A题:Factory
按照过程模拟,并判断是否出现循环,如果出现循环,说明肯定不可能,直接跳出。
代码如下:
#include #include #include #include using namespace std;int _hash[100001];int main(){ int a, m, i, flag=0; memset(_hash,0,sizeof(_hash)); scanf("%d%d",&a,&m); a=a%m; _hash[a]=1; while(1) { a=a*2%m; if(a==0) { flag=1; break; } if(_hash[a]) { break; } _hash[a]=1; } if(!flag) puts("No"); else puts("Yes"); return 0;}
B题:Valuable Resources
直接找行与列的最大值和最小值,不多说
代码如下:
#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define LL __int64const LL INF=1e11;int main(){ LL n, x, y, max1, max2, min1, min2, s; while(scanf("%I64d",&n)!=EOF) { max1=-INF; max2=-INF; min1=INF; min2=INF; while(n--) { scanf("%I64d%I64d",&x,&y); max1=max(max1,x); max2=max(max2,y); min1=min(min1,x); min2=min(min2,y); } s=max(max1-min1,max2-min2); s*=s; printf("%I64d\n",s); } return 0;}
C题:Bits
贪心
从小的开始,不断从低位开始加1,直到大于较大数为止。
代码如下:
#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define LL __int64const LL INF=1e11;int s[1000];int main(){ int n, len, max1; LL x, y, z1, z, i; scanf("%d",&n); while(n--) { scanf("%I64d%I64d",&x,&y); z1=x; len=0; memset(s,0,sizeof(s)); while(z1) { s[len++]=z1%2; z1/=2; } z=x; for(i=0;i y) { printf("%I64d\n",z); break; } z=x; } } } return 0;}
D题:Maximum Value
对于x来说,在k*x~(k+1)*x这段范围内,余数最大的肯定是最接近(k+1)*x的数,所以可以预处理出来所有最接近当前数的数,然后分别枚举每个数的倍数,并不断更新即可。
代码如下:
#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define LL __int64const int INF=0x3f3f3f3f;int _hash[2100000], dp[2100000], a[2100000];int main(){ int n, i, j, x, min1, ans, max1; while(scanf("%d",&n)!=EOF) { memset(_hash,0,sizeof(_hash)); min1=INF; max1=-1; for(i=0; i
查看更多关于CodeforcesRound#276(Div.2)解题报告_html/css_WEB-ITnose的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did106170