結果
| 問題 | No.470 Inverse S+T Problem |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-12-23 00:15:44 |
| 言語 | C90 (gcc 12.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,461 bytes |
| コンパイル時間 | 161 ms |
| コンパイル使用メモリ | 23,680 KB |
| 実行使用メモリ | 8,224 KB |
| 最終ジャッジ日時 | 2024-12-22 13:37:01 |
| 合計ジャッジ時間 | 4,474 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 26 TLE * 1 |
コンパイルメッセージ
main.c: In function ‘search’:
main.c:16:17: warning: implicit declaration of function ‘memset’ [-Wimplicit-function-declaration]
16 | memset(c,1,sizeof(c));
| ^~~~~~
main.c:3:1: note: include ‘<string.h>’ or provide a declaration of ‘memset’
2 | #include<stdlib.h>
+++ |+#include <string.h>
3 | int f[52][52][4];
main.c:16:17: warning: incompatible implicit declaration of built-in function ‘memset’ [-Wbuiltin-declaration-mismatch]
16 | memset(c,1,sizeof(c));
| ^~~~~~
main.c:16:17: note: include ‘<string.h>’ or provide a declaration of ‘memset’
main.c:18:9: warning: implicit declaration of function ‘memcpy’ [-Wimplicit-function-declaration]
18 | memcpy(cc,c,sizeof(cc));
| ^~~~~~
main.c:18:9: note: include ‘<string.h>’ or provide a declaration of ‘memcpy’
main.c:18:9: warning: incompatible implicit declaration of built-in function ‘memcpy’ [-Wbuiltin-declaration-mismatch]
main.c:18:9: note: include ‘<string.h>’ or provide a declaration of ‘memcpy’
main.c: In function ‘main’:
main.c:53:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
53 | scanf("%ld",&n);
| ^~~~~~~~~~~~~~~
main.c:59:25: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
59 | scanf("%s",s[i]);
| ^~~~~~~~~~~~~~~~
ソースコード
#include<stdio.h>
#include<stdlib.h>
int f[52][52][4];
int c[52][2];
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 0;
return 1;
}
int search(int i){
if(i==n) return 1;
int j,f0,f1;
int cc[52][2];
if(i==0){
memset(c,1,sizeof(c));
}
memcpy(cc,c,sizeof(cc));
f0=c[i][0];
f1=c[i][1];
if(f0){
c[i][0]=1;
c[i][1]=0;
memcpy(cc,c,sizeof(cc));
for(j=i+1;j<n;j++){
c[j][0]=c[j][0] && f[i][j][0];
c[j][1]=c[j][1] && f[i][j][1];
if(c[j][0]==0 && c[j][1]==0) break;
}
if(j==n) if(search(i+1)) return 1;
memcpy(c,cc,sizeof(cc));
}
if(f1){
c[i][0]=0;
c[i][1]=1;
memcpy(cc,c,sizeof(cc));
for(j=i+1;j<n;j++){
c[j][0]=c[j][0] && f[i][j][2];
c[j][1]=c[j][1] && f[i][j][3];
if(c[j][0]==0 && c[j][1]==0) break;
}
if(j==n) if(search(i+1)) return 1;
memcpy(c,cc,sizeof(cc));
}
c[i][0]=f0;
c[i][1]=f1;
return 0;
}
int main(){
int i,j,k,ff;
char s[52][4];
scanf("%ld",&n);
if(n>52){
printf("Impossible\n");
return 0;
}else{
for(i=0;i<n;i++){
scanf("%s",s[i]);
}
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
for(k=0;k<4;k++){
f[i][j][k]=check(s,i,j,k);
}
}
}
ff=search(0);
if(ff==0) printf("Impossible\n");
else{
for(i=0;i<n;i++){
if(c[i][0]==1){
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;
}