Codeforces Round #373 (Div. 2)

Posted walfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #373 (Div. 2)相关的知识,希望对你有一定的参考价值。

第一题花的时间有点多

A,注意考虑0,15的极端情况就好了,还有只有一个数的未知情况

技术分享
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000")

using namespace std;

const double g=10.0,eps=1e-7;
const int N=100000+10,maxn=500+100,inf=0x3f3f3f;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,a,b;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>b;
        if(i!=n)a=b;
    }
    if(n==1)
    {
        if(b==15)cout<<"DOWN"<<endl;
        else if(b==0)cout<<"UP"<<endl;
        else cout<<"-1"<<endl;
        return 0;
    }
    if(b==15)cout<<"DOWN"<<endl;
    else if(b==0)cout<<"UP"<<endl;
    else if(a>b)cout<<"DOWN"<<endl;
    else if(a<b)cout<<"UP"<<endl;
    return 0;
}
/*********************

*********************/
A

B题wa的次数太多了导致排名上不去,每次错了之后一找到bug就马上改过来交,根本没有考虑清楚,所以总是死在罚时上

先生产两个rb交替的字符串,如rbrbrb,brbrbr,然后挨个匹配记录r和b不同的次数,然后如果rb不同时为0,总是可以通过交换r,b来替代对r,b同时喷漆,这样就是最小的了

技术分享
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define C 0.5772156649
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000")

using namespace std;

const double g=10.0,eps=1e-7;
const int N=100000+10,maxn=1000000+10,inf=0x3f3f3f;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    string s,p1="",p2="";
    cin>>n>>s;
    for(int i=0; i<n; i++)
    {
        if(i&1)p1+=b,p2+=r;
        else p1+=r,p2+=b;
    }
    int r1=0,b1=0,r2=0,b2=0;
    for(int i=0;i<n;i++)
    {
        if(s[i]!=p1[i])
        {
            if(s[i]==r)r1++;
            else b1++;
        }
        if(s[i]!=p2[i])
        {
            if(s[i]==r)r2++;
            else b2++;
        }
    }
   // cout<<p1<<" "<<p2<<endl;
   // cout<<r1<<" "<<b1<<" "<<r2<<" "<<b2<<endl;
    cout<<min(min(r1,b1)+abs(r1-b1),min(r2,b2)+abs(r2-b2))<<endl;
    return 0;
}
/********************
5
bbrbb
********************/
B

C题模拟,要注意几个极端情况(如999.5进位,199.5进位,和小数点的处理)

技术分享
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define C 0.5772156649
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000")

using namespace std;

const double g=10.0,eps=1e-7;
const int N=100000+10,maxn=1000000+10,inf=0x3f3f3f;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,t,point=-1,fi=-1;
    string s;
    cin>>n>>t>>s;
    for(int i=0; i<n; i++)
    {
        if(s[i]==.)point=i;
        if(point!=-1&&fi==-1&&s[i]!=.&&s[i]>=5)fi=i;
    }
    if(fi==-1)
    {
        cout<<s<<endl;
        return 0;
    }
    s=s.substr(0,fi+1);
    int p=fi-1;
    while(p>=0&&s[p]==4)p--;
    int k=fi-p-1;
    if(t>=k+1)
    {
        s=s.substr(0,p+1);
        if(s[s.size()-1]==.)
        {
            s=s.substr(0,s.size()-1);
            s[s.size()-1]+=1;
         //   cout<<s<<endl;
            if(s[s.size()-1]==:)
            {
                int q=s.size()-2;
                s[q+1]=0;
                while(q>=0&&s[q]==9)s[q]=0,q--;
                if(q>=0)s[q]++;
                else s=1+s;
               // s=‘1‘+s;
            }
        }
        else s[s.size()-1]++;
        cout<<s<<endl;
    }
    else if(t==k)
    {
        s=s.substr(0,p+1);
        s+=5;
        cout<<s<<endl;
        return 0;
    }
    else
    {
        s[fi-t]=5;
        s=s.substr(0,fi-t+1);
        cout<<s<<endl;
    }
    return 0;
}
/********************
5 1
199.5
********************/
C

 

以上是关于Codeforces Round #373 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #373 (Div. 2) B

Codeforces Round #373 (Div. 2)

Codeforces Round #373 (Div. 2)

Codeforces Round #373 (Div. 2)

Codeforces Round #373 (Div. 2)

Codeforces Round #373 (Div. 2)