Codeforces Round 913 (Div. 3)
ROOK
思路:
我没有下过国际象棋,但这个题跟国际象棋真是没有一点关系,就是一个简单的输出
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
// int n;
string s;
cin>>s;
int x;
char a;
a=s[0];
x=s[1]-'0';
for(int i=1;i<=8;i++){
if(x!=i){
cout<<a<<i<<endl;
}
}
char a1='a';
for(int i=0;i<8;i++){
if(a1!=a){
cout<<a1<<x<<endl;
}
a1++;
}
return ;
}
signed main(){
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
B. YetnotherrokenKeoard
思路:
这个就是在说给你一个字符串,然后遇到字符B就是把之前他之前出现的最后一个大写字符删除,遇到b就是把他之前出现的最后一个小写字母删除,看到这里我们就可以用栈来实现,因为我们每次操作都是对栈顶元素进行删除,这样省去我们查找的时间,我们可以用下标映射字符,这样最后对两个栈里的元素进行一个排序即可得到最终的结果
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
// string s;
// cin>>s;
// string s1="";
// // cout<<s1<<endl;
// for(int i=0;i<s.size();i++){
// if(s[i]!='B'&&s[i]!='b'){
// s1+=s[i];
// // cout<<s1<<endl;
// }
// else if(s[i]=='B'){
// for(int i=s1.size();i>=0;i--){
// if(s1[i]>='A'&&s1[i]<='Z'){
// s1.erase(i,1);
// break;
// }
// }
// }
// else if(s[i]=='b'){
// for(int i=s1.size();i>=0;i--){
// if(s1[i]>='a'&&s1[i]<='z'){
// s1.erase(i,1);
// break;
// }
// }
// }
// }
// cout<<s1<<endl;
// return ;
//考虑下标产生的影响
string s;
cin>>s;
// std::vector<int> v1,v2;
std::stack<int> s1,s2;//栈
std::vector<int> v;
for(int i=0;i<s.size();i++){
if(s[i]!='B'&&s[i]!='b'){
if(s[i]>='A'&&s[i]<='Z'){
s1.push(i);
}
else{
s2.push(i);
}
}
else if(s[i]=='B'){
if(s1.size()){
s1.pop();
}
}
else if(s[i]=='b'){
if(s2.size()){
s2.pop();
}
}
}
while(s1.size()){
v.push_back(s1.top());
s1.pop();
}
while(s2.size()){
v.push_back(s2.top());
s2.pop();
}
sort(v.begin(),v.end());
for(auto x:v){
cout<<s[x];
}
cout<<endl;
return ;
}
signed main(){
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
C. Removal of Unattractive Pairs
思路:
C题一开始我都思路是正确的,可惜了没有坚持下去,反而浪费了很多时间,下次应该有思路就应该把思路整理完不然很容易错过正确思路
这个题我们只需要判断最多的那个字符就可以了,如果最多的那个字符都能有一个一个与之匹配,那就看省下的字符是是奇数还是偶数,如果不能匹配,那就输出差几个匹配位置就可以了
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
//突然想到了这应该是一个贪心问题
void solve(){
int n;
cin>>n;
string s;
cin>>s;
// // memset(a,0,sizeof a);
map<char,int> mp;
int maxn=0;
char x;
for(int i=0;i<s.size();i++){
mp[s[i]]++;
if(maxn<mp[s[i]]){
maxn=mp[s[i]];
x=s[i];
}
}
// cout<<maxn<<endl;
// return ;
// for(int i=0;i<n;i++){
// if(s[i]!=x){
// maxn--;
// }
// }
// if(maxn<=0){
// cout<<0<<endl;
// return ;
// }
// else{
// cout<<maxn<<endl;
// return ;
// }
int ans=n-maxn;
if(ans==maxn){
cout<<0<<endl;
return ;
}
else if(ans>maxn){
ans-=maxn;
if(ans%2){
cout<<1<<endl;
return ;
}
else{
cout<<0<<endl;
return ;
}
}
else{
cout<<maxn-ans<<endl;
return ;
}
return ;
}
signed main(){
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
E. Good Triples
思路:
感觉是最简单的一道题
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
int n;
cin>>n;
int ans=1;
while(n>0){
int x=n%10;
ans*=(x+1)*(x+2)/2;
n/=10;
}
cout<<ans<<endl;
return ;
}
signed main(){
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
标签:std,int,s1,Codeforces,long,--,solve,Div,913
From: https://www.cnblogs.com/du463/p/17883813.html