ARC #007
A
ソース
int main(){ char c; string s; cin>>c>>s; for(int i = 0; i < s.size(); i++){ if(s[i]!=c)cout<<s[i]; } cout<<endl; return 0; }
B
ソース
int main(){ int n,m; cin>>n>>m; vector<int> d(n+1); for(int i = 0; i <= n; i++)d[i]=i; for(int i = 0; i < m; i++){ int a; cin>>a; for(int i = 0; i < n+1; i++){ if(d[i]==a){ swap(d[0],d[i]); break; } } } for(int i = 1; i <= n; i++)cout<<d[i]<<endl; return 0; }
C
解法
全探索したり、DPする。全探索の方が早いけど、どちらでも良いから、好きな方を使えば良い。
ソース
bool dp[1<<10][11]; int main(){ string s; cin>>s; int n = s.size(),ans = 0; dp[0][0] = 1; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ int t = 0; for(int k = 0; k < n; k++){ if(s[(k+j)%n]=='o')t |= 1<<k; } for(int k = 0; k < 1<<n; k++){ dp[t|k][i+1] |= dp[k][i]; } } if(dp[(1<<n)-1][i+1]){ cout<<i+1<<endl; break; } } return 0; }
D
解けませんでした。初項は求まりますが、そのあとでバグって諦めました。