Educational Codeforces Round 51 (Rated for Div. 2) A模拟 B 构造 Cmap暴力 D dp

版权声明:本文为博主原创文章,未经博主允许也可以转载。 https://blog.csdn.net/FrankAx/article/details/82896614

A

Code:

#include <bits/stdc++.h>
using namespace std;
int main(){
	int T;
	cin >> T ; 
	string s ; 
	while( T-- ){
		cin >> s; 
		int a = 0 , b = 0 , c = 0 ;
		int len = s.size() ; 
		for( int i = 0 ; i < len ; i++ ){
			if( s[i] >= 'a' && s[i] <= 'z' ){
				a ++ ; 
			}else if( s[i] >= 'A' && s[i] <= 'Z' ){
				b ++ ;
			}else c ++ ;
		}
		if( a && b && c ){
			cout << s << endl;
		}
		else if( a && !b && !c ){
			cout << 1 << 'A' ;
			for( int i = 2 ;i < len ; i++ ) cout << s[i] ; 
				cout << endl;
		}
		else if( !a && b && !c ){
			cout << 1 << 'a' ;
			for( int i = 2 ;i < len ; i++ ) cout << s[i] ; 
				cout << endl;
		}
		else if( !a && !b && c ){
			cout << 'a' << 'A' ;
			for( int i = 2 ;i < len ; i++ ) cout << s[i] ; 
				cout << endl;
		}
		else if( a && b && !c ){
			int id ; 
			if( a > 1 ){
				for( int i = 0 ; i < len ; i++ ) if(s[i]>='a' && s[i] <='z') { s[i] = '1' ; break;}
			}else{
				for( int i = 0 ; i < len ; i++ ) if(s[i]>='A' && s[i] <='Z') { s[i] = '1' ; break;}
			}
			for( int i = 0 ; i < len ; i++ )  cout << s[i] ;
				cout << endl;
		}
		else if( a && !b && c ){
			int id ; 
			if( a > 1 ){
				for( int i = 0 ; i < len ; i++ ) if(s[i]>='a' && s[i] <='z') { s[i] ='A'; break;}
			}else{
				for( int i = 0 ; i < len ; i++ ) if(s[i]>='0' && s[i] <='9') { s[i] ='A'; break;}
			}
			for( int i = 0 ; i < len ; i++ )  cout << s[i] ;
				cout << endl;
		}
		else if( !a && b && c ){
			int id ; 
			if( b > 1 ){
				for( int i = 0 ; i < len ; i++ ) if(s[i]>='A' && s[i] <='Z') { s[i] = 'a' ; break;}
			}else{
				for( int i = 0 ; i < len ; i++ ) if(s[i]>='0' && s[i] <='9') { s[i] = 'a' ; break;}
			}
			for( int i = 0 ; i < len ; i++ ) cout << s[i] ;
				cout << endl;
		}
	}
	return 0 ; 
}

B

Code:

#include <bits/stdc++.h>
using namespace std;
int main(){
	long long l , r ; 
	cin >> l >> r ; 
	cout << "YES" << endl;
	for( long long i = l ; i <= r ; i++ ){
		cout << i << ' ' << i + 1 << endl;
		i ++ ; 
	}
	return 0 ; 
}

C

Code:

#include <bits/stdc++.h>
using namespace std;
const int AX = 1e2 + 6 ;
int a[AX];
int main(){
	int n ; 
	cin >> n ;
	set<int> s ; 
	map<int,int>mp;
	int len = 0 ; 
	for( int i = 0 ; i < n ; i++ ){
		cin >> a[i] ;
		mp[a[i]] ++ ;
	} 
	for( int i = 0 ; i < n ; i++ ){
		if( mp[a[i]] == 1 ){
			len ++ ;
		} 
	}
	if( len % 2 == 0 ){
		cout << "YES" << endl;
		int num = len / 2 ;  
		int cnt = 0 ;
		for( int i = 0 ; i < n ; i++ ){
			if( mp[a[i]] == 1 ){
				if( cnt < num ){
					cnt ++ ; 
					cout << "A" ;
				}else{
					cout << "B" ;
				}
			}else cout << "A"  ;
		}
		cout << endl;
	}else{
		int f = 0 ;
		for( int i = 0 ; i < n ; i++ ){
			if( mp[a[i]] >= 3 ){
				f = 1 ;
				break ;
			}
		}
		if(!f) cout << "NO" << endl;
		else{
			cout << "YES" << endl;
			//cout << len << endl;
			int num = (len - 1) / 2 ;  
			int cnt = 0 ;
			map<int,int>sp ; int ff = 0 ;
			for( int i = 0 ; i < n ; i++ ){
				if( mp[a[i]] == 1 ){
					if( cnt < num ){
						cnt ++ ; 
						sp[i] = 1 ; 
					}else{
						sp[i] = 2 ;
					}
				}else if( mp[a[i]] >= 3 && !ff ){
					sp[i] = 1 ; ff = 1 ;
				} 
			}
			for( int i = 0 ; i < n ; i++ ){
				cout << ( sp[i] == 1 ? 'A' : 'B' ) ;
			} cout << endl;
		}
	}
	return 0 ; 
}

D

思路:
只有两行,所以用0代表白1代表黑,就能表示最后一列的状态,然后用
dp[i][k][s] 表示共i列第k行状态是s的方案数。
Code:

#include <bits/stdc++.h>
#define LL long long
using namespace std ;
const int MOD = 998244353 ;
const int AX = 1e3 + 66 ;
LL dp[AX][AX*4][5];
void init(){
	memset( dp , 0 , sizeof(dp) ) ;
	dp[1][1][0] = 1 ;
	dp[1][1][3] = 1 ;
	dp[1][2][1] = 1 ; 
	dp[1][2][2] = 1 ;
}
int main(){
	int n , k ; 
	init() ; 
	for( int i = 2 ; i <= 1000 ; i++ ){
		for( int k = 1 ; k <= 2 * i ; k ++ ){
			dp[i][k][0] = 0LL + dp[i-1][k-1][3] + dp[i-1][k][0] % MOD + dp[i-1][k][1] + dp[i-1][k][2] % MOD ;
			dp[i][k][1] = 0LL + dp[i-1][k-1][3] + dp[i-1][k-1][0] % MOD + dp[i-1][k][1] % MOD ;
			if( k >= 2 ) dp[i][k][1] = ( dp[i][k][1] + dp[i-1][k-2][2] ) % MOD ; 
			dp[i][k][2] = 0LL + dp[i-1][k-1][3] + dp[i-1][k-1][0] % MOD + dp[i-1][k][2] % MOD ;
			if( k >= 2 ) dp[i][k][2] = ( dp[i][k][2] + dp[i-1][k-2][1] ) % MOD ; 
			dp[i][k][3] = 0LL + dp[i-1][k][3] + dp[i-1][k-1][0] % MOD + dp[i-1][k][1] + dp[i-1][k][2] % MOD ; 
		}
	}
	cin >> n >> k ; 
	LL res = 0LL ;
	res = ( dp[n][k][0] + dp[n][k][1] % MOD + dp[n][k][2] + dp[n][k][3] ) % MOD;
	cout << res << endl;
	return 0 ; 
}

猜你喜欢

转载自blog.csdn.net/FrankAx/article/details/82896614