今天是两个题,我就是个啥比,一个和一个,太打击人了。两思维题不会。反思一下为什么我什么都不会。 Problem - 1883B - Codeforces
第一题
第一题就是由于这个是可以重排的,所以我们只需要考虑奇偶对数就行了,只要奇数的对数即可。
#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;
}
第二题
第二题就是我们要把这个字符串化成的形式,那么由于开头是,结尾是,故我们只需要在中间这一段找到连续的两个也就是四个位置使得前面一对为,后面一对是即可,反正这思维我是一辈子也想不到的,只能说多练吧。
代码
#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;
}
还得训的嘞,太菜了也,这里目标还有多远啊。