自己做同城购物网站,个人网站logo图片,大型集团网站,做cg的网站比赛链接#xff1a;Dashboard - Codeforces Round 855 (Div. 3) - Codeforces
A#xff1a;模拟 题意#xff1a;给定一个字符串#xff0c;问这个字符串是不是猫叫。定义是猫叫得字符串#xff1a;
1#xff1a;必须由大写或小写得M#xff08;m#xff09;,EDashboard - Codeforces Round 855 (Div. 3) - Codeforces
A模拟 题意给定一个字符串问这个字符串是不是猫叫。定义是猫叫得字符串
1必须由大写或小写得Mm,Ee,Oo,Ww组成
2字符串起始必须是M大写或者小写都行紧跟其后必须是E接着是O接着是W然后结束。
分析根据条件将字符串扫一遍即可
代码
#include bits/stdc.h
#define pi acos(-1)
#define int long long
#define PII pairint,int
#define all(v) v.begin(),v.end()
#define INF 0x3f3f3f3f3f3f3f3f
#define fs(a) coutfixedsetprecision(a) //fs(4)(1.0/3)0.3333//保留a位小数
#define read() freopen(input.txt,r,stdin)
#define output() freopen(output.txt,w,stdout)
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int N2e510;
const int mod 1e97;
const int Mod 998244353;
int lowbit(int x){return x(-x);}
int up(int a,int b){return a0?a/b:(ab-1)/b;}// a/b向上取整
int quickpow(int a,int n){int ans1;while(n){if(n1){ans*a,ans%Mod;}a*a;a%Mod;n1;}return ans;}//快速幂
int qc(int a,int b,int p){int ans0;while(b){if(b1){ansa,ans%p;}a*2;a%p;b1;}return ans;}//快速乘 a*b%pinline void solve(){int n,i0;string s;cinns;if(n4||(s[0]!Ms[0]!m)){coutNO\n;return;}while(s[i]M||s[i]m) i;if(s[i]!Es[i]!e){coutNO\n;return;}while(s[i]E||s[i]e) i;if(s[i]!Os[i]!o){coutNO\n;return;}while(s[i]O||s[i]o) i;if(s[i]!Ws[i]!w){coutNO\n;return;}while(s[i]W||s[i]w) i;if(in) coutYES\n;else coutNO\n;
}signed main(){fast;int T;cinT;while(T--) solve();
} B贪心 题意 给定一个字符串相同字符的大小写为一个匹配对例如Aa。你可以使用任意次操作使得将大写字母改为小写字母或者小写字母改为大写字母。问最多有多少个匹配对
分析我们发现尽可能的使用完操作次数我们才会得到最大匹配对数。我们只需要记录一下相同字母对应的大小写个数然后可以先计算原始的匹配对再计算操作后的匹配对数。具体看代码
#include bits/stdc.h
#define pi acos(-1)
#define int long long
#define PII pairint,int
#define all(v) v.begin(),v.end()
#define INF 0x3f3f3f3f3f3f3f3f
#define fs(a) coutfixedsetprecision(a) //fs(4)(1.0/3)0.3333//保留a位小数
#define read() freopen(input.txt,r,stdin)
#define output() freopen(output.txt,w,stdout)
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int N2e510;
const int mod 1e97;
const int Mod 998244353;
int lowbit(int x){return x(-x);}
int up(int a,int b){return a0?a/b:(ab-1)/b;}// a/b向上取整
int quickpow(int a,int n){int ans1;while(n){if(n1){ans*a,ans%Mod;}a*a;a%Mod;n1;}return ans;}//快速幂
int qc(int a,int b,int p){int ans0;while(b){if(b1){ansa,ans%p;}a*2;a%p;b1;}return ans;}//快速乘 a*b%p
int u[N],l[N];inline void solve(){int n,k;string s;cinnks;memset(u,0,sizeof u);memset(l,0,sizeof l);for(int i0;in;i){if(isupper(s[i])) u[s[i]-A];else l[s[i]-a];}int ans0;for(int i0;i26;i){int minnmin(u[i],l[i]);ansminn;u[i]-minn;l[i]-minn;if(u[i]2){if(u[i]/2k) ansu[i]/2,k-u[i]/2;else ansk,k0;}else if(l[i]2){if(l[i]/2k) ansl[i]/2,k-l[i]/2;else ansk,k0;}}coutans\n;
}signed main(){fast;int T;cinT;while(T--) solve();
} C:模拟贪心大根堆 题意你的初始分数为0。给定一堆牌每个牌有一定的数字给定顺序去摸取。如果摸到非0牌则可以选择将此牌放在自己牌堆的堆顶或者放弃这张牌。如果摸到数字为0的牌则自己牌堆堆顶的数字会加到你的分数里面并且标记这张牌已经使用过问你能得到的最大分数。
分析根据题意我们发现在摸到非0牌之前我们要将最大的数字放在堆顶那么这是一个动态维护最大值的过程因此我们可以使用大根堆。大根堆的pop操作即为已经使用的牌。
代码
#include bits/stdc.h
#define pi acos(-1)
#define int long long
#define PII pairint,int
#define all(v) v.begin(),v.end()
#define INF 0x3f3f3f3f3f3f3f3f
#define fs(a) coutfixedsetprecision(a) //fs(4)(1.0/3)0.3333//保留a位小数
#define read() freopen(input.txt,r,stdin)
#define output() freopen(output.txt,w,stdout)
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int N2e510;
const int mod 1e97;
const int Mod 998244353;
int lowbit(int x){return x(-x);}
int up(int a,int b){return a0?a/b:(ab-1)/b;}// a/b向上取整
int quickpow(int a,int n){int ans1;while(n){if(n1){ans*a,ans%Mod;}a*a;a%Mod;n1;}return ans;}//快速幂
int qc(int a,int b,int p){int ans0;while(b){if(b1){ansa,ans%p;}a*2;a%p;b1;}return ans;}//快速乘 a*b%p
int a[N];inline void solve(){int n;cinn;priority_queueintq;for(int i1;in;i) cina[i];int ans0,cnt1;while(1){if(cntn) break;while(cntna[cnt]!0) q.push(a[cnt]);while(cntna[cnt]0){if(!q.size()){cnt;continue;}else{ansq.top();q.pop();cnt;}}}coutans\n;
}signed main(){fast;int T;cinT;while(T--) solve();
}
D:思维 题意给定字符串 s你可以移除其中两个连续的字母。问操作之后你所能得到的不同字符串的数量是多少
分析我们发现如果这样一组字符串aba那么删掉两个相邻的元素所得的结果串是一样的。那么我们可以得出一个结论如果,那么就说明有一个重复串的出现。
此外还有一个结论可以从样例得出如果一个长度为n的串所含的不同字符个数为n那么可以得到n-1个不同的串。因此我们只需要减掉重复串的个数即可。
代码
#include bits/stdc.h
#define pi acos(-1)
#define int long long
#define PII pairint,int
#define all(v) v.begin(),v.end()
#define INF 0x3f3f3f3f3f3f3f3f
#define fs(a) coutfixedsetprecision(a) //fs(4)(1.0/3)0.3333//保留a位小数
#define read() freopen(input.txt,r,stdin)
#define output() freopen(output.txt,w,stdout)
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int N2e510;
const int mod 1e97;
const int Mod 998244353;
int lowbit(int x){return x(-x);}
int up(int a,int b){return a0?a/b:(ab-1)/b;}// a/b向上取整
int quickpow(int a,int n){int ans1;while(n){if(n1){ans*a,ans%Mod;}a*a;a%Mod;n1;}return ans;}//快速幂
int qc(int a,int b,int p){int ans0;while(b){if(b1){ansa,ans%p;}a*2;a%p;b1;}return ans;}//快速乘 a*b%p
int a[N];inline void solve(){int n;string s;cinns;int ans0;for(int i0;in-2;i){if(s[i]s[i2]) ans;}coutn-ans-1\n;
}signed main(){fast;int T;cinT;while(T--) solve();
} E:思维 题意给定两个字符串和k字符串可以将下标 和|i−j|k和|i−j|k1 得两个字符 aiaj 发生交换
分析通过手撸样例可以发现如果当n5k3的时候满足条件的点为[1,4],[1,5],[2,5]。然后你会发现点1245的位置可以任意交换。位置3则不能交换。所以思路很显然了。
首先判断两个字符串中包含的字符数是否相同再判断不能交换位置的点上的字符是否相同。
代码
#include bits/stdc.h
#define pi acos(-1)
#define int long long
#define PII pairint,int
#define all(v) v.begin(),v.end()
#define INF 0x3f3f3f3f3f3f3f3f
#define fs(a) coutfixedsetprecision(a) //fs(4)(1.0/3)0.3333//保留a位小数
#define read() freopen(input.txt,r,stdin)
#define output() freopen(output.txt,w,stdout)
#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int N2e510;
const int mod 1e97;
const int Mod 998244353;
int lowbit(int x){return x(-x);}
int up(int a,int b){return a0?a/b:(ab-1)/b;}// a/b向上取整
int quickpow(int a,int n){int ans1;while(n){if(n1){ans*a,ans%Mod;}a*a;a%Mod;n1;}return ans;}//快速幂
int qc(int a,int b,int p){int ans0;while(b){if(b1){ansa,ans%p;}a*2;a%p;b1;}return ans;}//快速乘 a*b%pinline bool pd(string a,string b){mapchar,intmp1,mp2;for(int i0;ia.size();i) mp1[a[i]];for(int i0;ib.size();i) mp2[b[i]];for(auto x:a){if(mp1[x]!mp2[x]) return false;}return true;
}inline void solve(){int n,k;string s,t;cinnkst;if(!pd(s,t)){coutNO\n;return;}bool oktrue;for(int i0;in;i){if(ikn-i-1ks[i]!t[i]){okfalse;break;}}if(ok) coutYES\n;else coutNO\n;
}signed main(){fast;int T;cinT;while(T--) solve();
}