結果
| 問題 |
No.470 Inverse S+T Problem
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-12-25 09:24:57 |
| 言語 | C90 (gcc 12.3.0) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 2,000 ms |
| コード長 | 1,361 bytes |
| コンパイル時間 | 275 ms |
| コンパイル使用メモリ | 22,144 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-22 13:39:18 |
| 合計ジャッジ時間 | 1,631 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 27 |
コンパイルメッセージ
main.c: In function ‘main’:
main.c:15:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
15 | scanf("%ld",&n);
| ^~~~~~~~~~~~~~~
main.c:21:25: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
21 | scanf("%s",s[i]);
| ^~~~~~~~~~~~~~~~
ソースコード
#include<stdio.h>
int c[52],tmp[52];
int next[52];
int cur,t,ch;
long n;
int check(char s[52][4],int i,int j,int k){
if(s[i][(k/2)*2]==s[j][(k%2)*2] || (s[i][1-k/2]==s[j][1-k%2] && s[i][2-k/2]==s[j][2-k%2])) return 1;
return 0;
}
int main(){
int i,j,k,ff;
char s[52][4];
scanf("%ld",&n);
if(n>52){
printf("Impossible\n");
return 0;
}
for(i=0;i<n;i++){
scanf("%s",s[i]);
}
for(i=0;i<n;i++) c[i]=-1;
for(i=0;i<n;i++){
if(c[i]!=-1) continue;
for(j=0;j<2;j++){
ch=1;
for(t=0;t<n;t++) tmp[t]=c[t];
tmp[i]=j;
next[0]=i;
t=1;
cur=0;
while(cur<t && ch){
for(k=0;k<n;k++){
if(k==next[cur]) continue;
ff=0;
if(tmp[k]==0) ff=(ff | 1);
else if(tmp[k]==1) ff=(ff | 2);
if(check(s,next[cur],k,tmp[next[cur]]*2+1)) ff=(ff | 1);
if(check(s,next[cur],k,tmp[next[cur]]*2)) ff= (ff | 2);
if(ff==3){
ch=0;
break;
}
if(ff!=0 && tmp[k]==-1){
tmp[k]=ff-1;
next[t]=k;
t++;
}
}
cur++;
}
if(ch==1){
for(k=0;k<n;k++) c[k]=tmp[k];
break;
}
c[i]=-1;
}
if(c[i]==-1){
printf("Impossible\n");
return 0;
}
}
for(i=0;i<n;i++){
if(c[i]==0){
printf("%c %c%c\n",s[i][0],s[i][1],s[i][2]);
}else{
printf("%c%c %c\n",s[i][0],s[i][1],s[i][2]);
}
}
return 0;
}