Codeforces Round 913 (Div. 3)

发布时间 2023-12-07 19:46:10作者: du463

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;

}