• AtCoder Beginner Contest 160(A~D)


    A - Coffee

    题意:给你一个字符串,要你判断是否满足一下条件,全部满足则输出“Yes”,否则输出“No”。

      (1)字符串的第3个字母等于字符串的第4个字母

      (2)字符串的第5个字母等于字符串的第6个字母

      (3)字符串的长度为6,且全部为小写字母

    题解:签到题,易解

    代码:

    #include<iostream>
    #include<cstring>
    #include<map>
    #include<algorithm>
    using namespace std;
    #define ll long long
    int main(){    
        string ptr;
        cin>>ptr;
        int f=1;
        for(int i=0;i<ptr.length();i++){
            if(ptr[i]>='A'&&ptr[i]<'Z'){
                f=0;
                break;
            }
        }
        if(f==0){
            cout<<"No"<<endl;
            return 0;
        }
        if(ptr.length()==6){
            if(ptr[2]==ptr[3]&&ptr[4]==ptr[5]){
                cout<<"Yes"<<endl;
            }else{
                cout<<"No"<<endl;
            }
        }else{
            cout<<"No"<<endl; 
        }
        return 0;
    }

    B - Golden Coins

    题解:是一个简单的贪心题,也属于签到题

    代码:

    #include<iostream>
    #include<cstring>
    #include<map>
    #include<algorithm>
    using namespace std;
    #define ll long long
    int main(){    
        ll mo;
        cin>>mo;
        ll sum=0;
        ll n1=mo/500;
        ll n2=(mo%500)/5;
        sum=n1*1000+n2*5;
        cout<<sum<<endl;
        return 0;
    }

    C - Traveling Salesman around Lake

    题意:大概意思就是存在一个周长为K的圆,在它的周边分布着N个点,分布分别距离圆的最北端的激距离分别为ai,由下面的N个数给出

    题解:这一题其实比较简单,你将这个圆分为N-1段,将他们的的和,然后遍历舍去某一段,取它的最小值即可,

    代码:

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #define ll long long
    using namespace std;
    ll num[200010]={0};
    int main(){
        ll K,N;
        cin>>K>>N;
        memset(num,0,sizeof(num));
        for(int i=0;i<N;i++){
            cin>>num[i];
        }
        sort(num,num+N);
        if(N==1){//只有一个 
            cout<<0<<endl;
        }else if(N==2){//有两个
            ll len=num[N-1]-num[0];
            cout<<min(len,K-len)<<endl; 
        }else{//至少有三个及以上
            ll min_l=10000000;
            ll len[200010]={0},t=0;
            ll sum=0;
            for(int i=1;i<N;i++){
                len[t++]=num[i]-num[i-1];
                sum=sum+len[t-1];
            }
            len[t++]=K-num[N-1]+num[0];
            sum=sum+len[t-1];
            for(int i=0;i<t;i++){//丢掉第  i  个数 
                min_l=min(min_l,sum-len[i]);
            }
            cout<<min_l<<endl;
        }
        return 0;
    }

    D - Line++

    题意:这一题大概是讲存在N个顶点,从1~N相邻两个顶点之间存在一条边,给出x、y,这两个顶点也存在一条边,令k=1,2,3,4,,,,N-1,求两个点之间的最短距离为k对数

    题解:这里可以讲每两个点的距离分为两种情况:经过x,y;不经过x,y,就可以分别求出每一对的距离,取这两者的最小值,然后用桶来给每中距离计数即可

    代码:

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #define ll long long
    using namespace std;
    ll s[2005][2005];
    ll ans[2005*2005]={0};
    int main(){
        ll N,x,y;
        cin>>N>>x>>y;
        ll a=x,b=y;
        x=min(a,b);
        y=max(a,b);
        for(ll i=1;i<=N;i++){
            for(ll j=i+1;j<=N;j++){
                s[i][j]=min(j-i,abs(x-i)+abs(y-j)+1);
            }
        }
        
        for(int i=1;i<=N;i++){
            for(int j=i+1;j<=N;j++){
                ans[s[i][j]]++;
            }
        }
        for(int i=1;i<N;i++){
            cout<<ans[i]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    言多必失失在哪?
    C/C++四种方法实现加法操作_艾孜尔江撰
    VS Code添加到右键菜单_艾孜尔江撰
    网页端UVC相机测试_艾孜尔江撰
    Python爬虫示例
    Java制作软光栅化渲染器_艾孜尔江撰
    指针常量与常量指针
    C/C++中Main之后执行的函数_艾孜尔江撰
    Token机制 ——JSON Web Token(JWT)的详解
    Excel-实现隔行设置背景色
  • 原文地址:https://www.cnblogs.com/blogxsc/p/12594541.html
Copyright © 2020-2023  润新知