zoukankan      html  css  js  c++  java
  • Codeforces Round #604 题解

    A题

    本题根据题意模拟能解,不排除更好的做法

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<vector>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    const int N=1e5+10;
    int main(){
        int t;
        cin>>t;
        while(t--){
            string s;
            cin>>s;
            int i;
            int flag=1;
            for(i=0;i<s.size()-1;i++){
                if(s[i]==s[i+1]&&s[i]!='?'&&s[i+1]!='?'){
                    cout<<-1<<endl;
                    flag=0;
                    break;
                }
            }
            if(!flag)
            continue;    
            int a=s.size()-1;
            if(a==0){
                cout<<"a"<<endl;
                continue;
            }
            for(i=0;i<s.size()-1;i++){
                if(s[i]=='?'&&s[i+1]!='?'){
                   if(i==0){
                        if(s[i+1]=='a')
                        s[i]='b';
                        if(s[i+1]=='b')
                        s[i]='c';
                        if(s[i+1]=='c')
                        s[i]='a';
                   }
                   else{
                       if(s[i-1]!=s[i+1])
                       s[i]=('a'+'b'+'c'-s[i+1]-s[i-1]);
                       else{
                           if(s[i+1]=='a')
                        s[i]='b';
                        if(s[i+1]=='b')
                        s[i]='c';
                        if(s[i+1]=='c')
                        s[i]='a';
                    }
                   }    
                }
                else if(s[i]=='?'&&s[i+1]=='?'){
                    if(i==0)
                    s[i]='a';
                    else{
                        if(s[i-1]=='a')
                        s[i]='b';
                        if(s[i-1]=='b')
                        s[i]='c';
                        if(s[i-1]=='c')
                        s[i]='a';
                    }
                }
            }
        
            if(s[a]=='?'){
                if(s[i-1]=='a')
                        s[i]='b';
                        if(s[i-1]=='b')
                        s[i]='c';
                        if(s[i-1]=='c')
                        s[i]='a';
            }
            cout<<s<<endl;
        }
    }
     
    View Code

    B题

    我们能够发现,只需要关注位置关系就能求解本题,所以我们设计一个pos数组记录每个值他的位置在哪

    我们可以从1开始遍历到n,然后设计两个变量维护左右边界

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<vector>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    const int N=2e5+10;
    int main(){
        int t;
        cin>>t;
        int a[N];
        int pos[N];
        while(t--){
            int n;
            cin>>n;
            int i,j;
            for(i=1;i<=n;i++){
                cin>>a[i];
                pos[a[i]]=i;    
            }
            int l=pos[1];
            int r=pos[1];
            for(i=1;i<=n;i++){
                l=min(pos[i],l);
                r=max(pos[i],r);
                if(r-l+1==i)
                cout<<1;
                else
                cout<<0;
            }
            cout<<endl;
        }
    }
    View Code

    C题

    贪心题目,金牌越多越好,然后银牌只需要比金牌大,其他控制铜牌就可以,因为其他情况需要满足更多的条件

    我们求取的是最大的奖牌数。

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<vector>
    #include<cstring>
    #include<map>
    using namespace std;
    typedef long long ll;
    const int N=2e5+10;
    map<int,int> m1;
    int main(){
        int t;
        cin>>t;
        while(t--){
            m1.clear();
            int n;
            int i;
            cin>>n;
            int h;
            for(i=1;i<=n;i++){
                cin>>h;
                m1[-h]++;
            }
            if(m1.size()<3){
                cout<<"0 0 0"<<endl;
                continue;
            }
            int g=0;
            int s=0;
            int b=0;
            int flag=0;
            for(auto x:m1){
                if(flag==0){
                    if(g+s+b+x.second>n/2)
                     break;
                    g=x.second;
                    flag++;
                }
                else if(flag==1){
                    if(g+s+b+x.second>n/2)
                break;
                    s+=x.second;
                    if(s>g)
                    flag++;
                }
                else{
                    if(g+s+b+x.second>n/2)
                    break;
                    b+=x.second;
                }
            }
            if(g==0||s==0||b==0)
            cout<<"0 0 0"<<endl;
            else if(g>=s||g>=b)
            cout<<"0 0 0"<<endl;
            else
            cout<<g<<" "<<s<<" "<<b<<endl;
        }
    }
     
    View Code
  • 相关阅读:
    Spring Aop
    Java 内存分配
    wrapper class (Integer 为例)
    asp.net mvc 中"未找到路径“/favicon.ico”的控制器或该控制器未实现 IController。"
    .Net反射机制
    设计模式系列一创建型之(抽象工厂模式)
    设计模式系列一创建型之(单件模式)
    设计模式系列二结构型之(装饰者模式)
    设计模式系列二结构型之(策略者模式)
    设计模式系列一创建型模式之(简单工厂VS工厂方法)
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12251627.html
Copyright © 2011-2022 走看看