1883B - Chemistry && 1861B - Two Binary Strings

65 阅读1分钟

今天是两个BB题,我就是个啥比,一个div3div3和一个div2div2,太打击人了。两思维题不会。反思一下为什么我什么都不会。 Problem - 1883B - Codeforces

Problem - 1861B - Codeforces

第一题

第一题就是由于这个是可以重排的,所以我们只需要考虑奇偶对数就行了,只要奇数的对数<=k+1<=k+1即可。

#include <bits/stdc++.h>

#define ll long long
#define x first
#define y second

#define IOS ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);


using namespace std;
int cnt[26];
void solve(){
	int n,k;
	cin>>n>>k;
	string s;
	cin>>s;
	memset(cnt,0,sizeof cnt);
	for(int i=0;i<s.size();i++){
		cnt[s[i]-'a']++;
	}
	int ji=0,ou=0;
	for(int i=0;i<26;i++){
		if(cnt[i]%2==0) ou++;
		else ji++; 
	}
	if(ji>k+1) cout<<"NO\n";
	else cout<<"YES\n";
	
}
int main(){
	
	int t;
	cin>>t;
	while(t--) solve();
	return 0;
} 

第二题

第二题就是我们要把这个字符串化成00000...111100000...1111的形式,那么由于开头是00,结尾是11,故我们只需要在中间这一段找到连续的两个也就是四个位置使得前面一对为00,后面一对是11即可,反正这思维我是一辈子也想不到的QAQQAQ,只能说多练吧。

代码

#include <bits/stdc++.h>

#define ll long long
#define x first
#define y second

#define IOS ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);


using namespace std;
const int N=5010;
bool st[N];
void solve(){
	string s1,s2;
	cin>>s1>>s2;
	memset(st,false,sizeof st);
	if(s1==s2){
		cout<<"YES\n";
		return;
	}
	bool flag=false;
	for(int i=0;i+1<s1.size();i++){
		if(s1[i]==s2[i] && s1[i]=='0' && s1[i+1]=='1' && s1[i+1]==s2[i+1]){
			flag=true;
			break;
		}
	}
	if(flag) cout<<"YES\n";
	else cout<<"NO\n";
}
int main(){
	
	int t;
	cin>>t;
	while(t--) solve();
	return 0;
} 

还得训的嘞,太菜了也,这里目标还有多远啊。