結果
問題 | No.308 素数は通れません |
ユーザー |
![]() |
提出日時 | 2015-12-25 18:37:11 |
言語 | C++11 (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,090 bytes |
コンパイル時間 | 412 ms |
コンパイル使用メモリ | 48,432 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-18 23:57:37 |
合計ジャッジ時間 | 2,385 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 36 WA * 71 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:13:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 13 | scanf("%s",in); | ~~~~~^~~~~~~~~
ソースコード
#include<stdio.h> #include<algorithm> #include<string.h> #include<queue> using namespace std; char in[20000]; int c[120][120]; int dx[]={1,0,-1,0}; int dy[]={0,1,0,-1}; int bfs[120][120]; int pri[300]; int main(){ scanf("%s",in); int len=strlen(in); if(len>2){ printf("-1\n");return 0; } pri[0]=pri[1]=-1; for(int i=2;i<300;i++){ if(pri[i]==0){ pri[i]=1; for(int j=i+i;j<300;j+=i)pri[j]=-1; } } int a; sscanf(in,"%d",&a); if(pri[a]==1)while(1); for(int i=1;i<a;i++){ for(int j=0;j<120;j++)for(int k=0;k<120;k++){ c[j][k]=-1; bfs[j][k]=0; } for(int j=0;j<a;j++){ c[j/i][j%i]=j+1; } queue<pair<int,int> > Q; Q.push(make_pair(0,0)); bfs[0][0]=1; while(Q.size()){ int row=Q.front().first; int col=Q.front().second;Q.pop(); for(int j=0;j<4;j++){ int tr=row+dx[j]; int tc=col+dy[j]; if(tr<0||tc<0)continue; if(c[tr][tc]==-1)continue; if(pri[c[tr][tc]]==1)continue; if(bfs[tr][tc])continue; bfs[tr][tc]=1; Q.push(make_pair(tr,tc)); } } if(bfs[(a-1)/i][(a-1)%i]){ printf("%d\n",i);return 0; } } }