ホームページ > 記事 > ウェブフロントエンド > Codeforces ラウンド #276 (ディビジョン 2) ソリューション Report_html/css_WEB-ITnose
質問アドレス: 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 の範囲で、最大の剰余を持つものが最も近いものでなければなりませんto (k+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 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;}