Particle

競技プログラミングについての雑記

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

解けませんでした。初項は求まりますが、そのあとでバグって諦めました。