码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #604 题解

时间:2020-02-02 13:58:29      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:设计   cin   src   stream   题目   div   排除   str   name   

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

 

Codeforces Round #604 题解

标签:设计   cin   src   stream   题目   div   排除   str   name   

原文地址:https://www.cnblogs.com/ctyakwf/p/12251627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!