题目地址:http://codeforces.com/contest/485
A题:Factory
按照过程模拟,并判断是否出现循环,如果出现循环,说明肯定不可能,直接跳出。
代码如下:
立即学习“前端免费学习笔记(深入)”;
#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>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;}立即学习“前端免费学习笔记(深入)”;
直接找行与列的最大值和最小值,不多说
代码如下:
立即学习“前端免费学习笔记(深入)”;
#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>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;}立即学习“前端免费学习笔记(深入)”;
贪心
从小的开始,不断从低位开始加1,直到大于较大数为止。
代码如下:
立即学习“前端免费学习笔记(深入)”;
#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>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<100;i++) { if(s[i]==0) { x+=(LL)1<<i; //printf("%d\n",1<<i); if(x>y) { printf("%I64d\n",z); break; } z=x; } } } return 0;}立即学习“前端免费学习笔记(深入)”;
对于x来说,在k*x~(k+1)*x这段范围内,余数最大的肯定是最接近(k+1)*x的数,所以可以预处理出来所有最接近当前数的数,然后分别枚举每个数的倍数,并不断更新即可。
代码如下:
立即学习“前端免费学习笔记(深入)”;
#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>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<n; i++) { scanf("%d",&x); _hash[x]=1; min1=min(min1,x); max1=max(max1,x); } for(i=min1; i<=2000000; i++) { if(_hash[i-1]) dp[i]=i-1; else dp[i]=dp[i-1]; } ans=0; for(i=1; i<=1000000; i++) { if(_hash[i]) { for(j=2*i; ; j+=i) { if(dp[j]<i) continue ; ans=max(ans,dp[j]%i); if(dp[j]==max1) break; //printf("%d %d\n",j,ans); } } } printf("%d\n",ans); } return 0;}立即学习“前端免费学习笔记(深入)”;
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号