Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Kobutanukituneko"
https://onlinejudge.u-aizu.ac.jp/problems/0225
・こぶたぬきつねこ
僕が作成、提出したコードは、以下のとおりです。
・Aizu Online Judge in C++ #Volume2 - 0225 : Kobutanukituneko
/* Aizu Online Judge in C++ #Volume2 - 0225 : Kobutanukituneko https://onlinejudge.u-aizu.ac.jp/problems/0225 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll n; string s; int main(void){ while(cin>>n,n){ ll a[26][26]={},b[26]={},c[26][26],d1=0,d2=0,e1=0,e2=0; for(ll i=0;i<n;i++){ cin>>s; a[s[0]-'a'][s[s.size()-1]-'a']++; b[s[0]-'a']++; b[s[s.size()-1]-'a']++; } for(ll i=0;i<26;i++){ for(ll j=0;j<26;j++){ e1+=a[i][j]; e2+=a[j][i]; } if(e1!=e2){ d1++; } e1=e2=0; } if(!d1){ for(ll i=0;i<26;i++){ for(ll j=0;j<26;j++){ c[i][j]=(a[i][j] ? 1 : 1e9); } } } if(!d1){ for(ll k=0;k<26;k++){ for(ll i=0;i<26;i++){ for(ll j=0;j<26;j++){ c[i][j]=min(c[i][j],c[i][k]+c[k][j]); } } } } if(!d1){ for(ll i=0;i<26;i++){ for(ll j=0;j<26;j++){ if(i!=j && b[i] && b[j] && c[i][j]==1e9){ d2++; } } } } cout<<((d1 || d2) ? "NG\n" : "OK\n"); } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/