首页 > 其他 > 详细

AtCoder Beginner Contest 160

时间:2020-04-06 21:57:29      阅读:59      评论:0      收藏:0      [点我收藏+]

比赛链接:https://atcoder.jp/contests/abc160/tasks

AtCoder Beginner Contest 160

A - Coffee

技术分享图片
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;cin>>s;
    cout<<(s[2]==s[3]&&s[4]==s[5]?"Yes":"No");
    return 0;
}
View Code

B - Golden Coins

技术分享图片
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int x;cin>>x;
    cout<<(x/500*1000+x%500/5*5);
    return 0;
}
View Code

C - Traveling Salesman around Lake

题意:环形池塘的一周坐落着几户人家,问以一户为起点拜访完所有人家的最短路程 。

思路:对于最短路程来说,无论是顺时针还是逆时针都不会改变,所以按照题目给出的顺时针顺序两两相减即可,差小于零代表着逆时针需要走的路程,加上一个圆周即是顺时针需要走的路程。

技术分享图片
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int k,n;cin>>k>>n;
    int a[n];for(int &i:a) cin>>i;
    int mi=numeric_limits<int>::max();
    for(int i=0;i<n;i++) mi=(mi,a[(i+n-1)%n]-a[i]+k)%k;
    cout<<mi;
    return 0;
}
View Code

D - Line++

题意:一条链中再有不相邻两点相连,问最短距离为1~N-1的点对各有多少。

思路:BFS得到每个点到其他点的最短距离。

技术分享图片
#include <bits/stdc++.h>
using namespace std;
const int M=2200;
vector<int> e[M];
int dis[M][M],ans[M];
void bfs(int st){
    queue<int> q;
    dis[st][st]=1;
    q.push(st);
    while(!q.empty()){
        int u=q.front();
        q.pop();
        for(int v:e[u])
            if(dis[v][st]==0){
                dis[v][st]=dis[u][st]+1;
                q.push(v);
            }
    }
}
int main(){
    int n,x,y;cin>>n>>x>>y;
    for(int i=0;i<n-1;i++){
        e[i].push_back(i+1);
        e[i+1].push_back(i);
    }
    --x,--y;
    e[x].push_back(y);
    e[y].push_back(x);
    for(int i=0;i<n;i++)
        bfs(i);
    for(int i=0;i<n;i++)
        for(int j=i+1;j<n;j++)
            ++ans[dis[i][j]-1];
    for(int i=1;i<n;i++)
        cout<<ans[i]<<"\n";
    return 0;
}
View Code

E - Red and Green Apples

题意:有A个红苹果,B个绿苹果,C个无色苹果(可以当作红苹果或绿苹果),每个苹果有一个可口度,若要吃掉X个红苹果,Y个绿苹果(X≤A,Y≤B),问最大可口度之和。

思路:取A中X个较可口的红苹果,B中Y个较可口的绿苹果,如C中有更可口的无色苹果替换之。

技术分享图片
#include <bits/stdc++.h>
using namespace std;
int main(){
    int x,y,a,b,c;cin>>x>>y>>a>>b>>c;
    vector<int> v1(a),v2(b),v3(c);
    for(int &i:v1) cin>>i; 
    for(int &i:v2) cin>>i; 
    for(int &i:v3) cin>>i;
    sort(v1.rbegin(),v1.rend());
    sort(v2.rbegin(),v2.rend());
    for(int i=0;i<x;i++) v3.push_back(v1[i]);
    for(int i=0;i<y;i++) v3.push_back(v2[i]);
    sort(v3.rbegin(),v3.rend());
    cout<<accumulate(v3.begin(),v3.begin()+x+y,0LL);
    return 0;
}
View Code

F - Distributing Integers

待填。

AtCoder Beginner Contest 160

原文:https://www.cnblogs.com/Kanoon/p/12644109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!