当前位置: 移动技术网 > 移动技术>移动开发>IOS > Atcoder abc 160 (A~E)

Atcoder abc 160 (A~E)

2020年07月17日  | 移动技术网移动技术  | 我要评论

A
A题链接
题意:第三第四一样,第五第六位一样则输出yes,否则NO
模拟即可
AC代码:

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include<cstring>
#include <math.h>
#include <queue>
typedef long long ll;
using namespace std;

int main()
{
    char a[6];
    cin>>a;
    if(a[2]==a[3]&&a[4]==a[5])
    {
        cout<<"Yes";
    }
    else
    {
        cout<<"No";
    }
    return 0;
}

B
B题链接
题意500日元1000快乐值,5日元5快乐值,求最大快乐值
贪心,能取500取500。
AC代码:

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include<cstring>
#include <math.h>
#include <queue>
typedef long long ll;
using namespace std;

int main()
{
    int n;
    cin>>n;
    int c=n%500;
    int k=n/500;
    int t=c/5;
    cout<<k*1000+t*5;
    return 0;
}

C
C题链接
题意 一个周长为k的圆,上面有n座房子,输出从一座房子出发走遍所有房子的最短路程。
找到相邻两栋楼距离最大的,周长减去即可

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include<cstring>
#include <math.h>
#include <queue>
typedef long long ll;
using namespace std;
int a[200005];
int maxs;
int main()
{
    int k,n;
    cin>>k>>n;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    sort(a,a+n);
    for(int i=0;i<n-1;i++)
    {
        int q=a[i+1]-a[i];
        if(maxs<q)
        {
            maxs=q;
        }
    }
    int q=k-a[n-1]+a[0];
    if(maxs<q)
    {
        maxs=q;
    }
    cout<<k-maxs;
    return 0;
}

D
D题链接
两种走法,一种按不加X,Y的路径走,另一种按通过X,Y的路径走,两种路径取最小值。
两个点(i,j)的j距离为 min(i-j,abs(x-j)+abs(y-i)+1)
AC代码为:

#include<iostream>
#include<cstdio>
#include <stdio.h>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<map>
#include<vector>
#include <set>
#define ll long long
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#define inf 0x3f3f3f3f
using namespace std;
int ans[2020];
int n,x,y;
int main()
{
    cin>>n>>x>>y;
    for(int  i=1;i<=n;i++)
    {
        for(int j=1;j<i;j++)
        {
            ans[min(i-j,abs(x-j)+abs(y-i)+1)]++;
        }
    }
    for(int i=1;i<=n-1;i++)
    {
        cout<<ans[i]<<endl;
    }
    return 0;
}

E
E题链接
题意 :有A个红苹果和对应的快乐值,B个绿苹果和对应的快乐值,C个无颜色的苹果和对应的快乐值,无颜色苹果可以当作红苹果或者绿苹果,最后要吃X个红苹果,Y个绿苹果,求最大快乐值。
题解:把前X个红苹果,Y个绿苹果加入无颜色苹果中排序,取前X+Y个即为最大值。
AC代码:

#include<iostream>
#include<cstdio>
#include <stdio.h>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<map>
#include<vector>
#include <set>
#define ll long long
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#define inf 0x3f3f3f3f
using namespace std;
int a[100010];
int b[100010];
int c[500010];
int x,y;
int A,B,C;
int cmp(int a,int b)
{
    return a>b;
}
int main()
{
    cin>>x>>y>>A>>B>>C;
    for(int i=0;i<A;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<B;i++)
    {
        cin>>b[i];
    }
    for(int i=0;i<C;i++)
    {
        cin>>c[i];
    }
    sort(a,a+A,cmp);
    sort(b,b+B,cmp);
    for(int i=0;i<x;i++)
    {
        c[i+C]=a[i];
    }
    for(int i=0;i<y;i++)
    {
        c[i+C+x]=b[i];
    }
    sort(c,c+C+x+y,cmp);
    ll sum=0;
    for(int i=0;i<x+y;i++)
    {
        sum+=c[i];
    }
    cout<<sum<<endl;
    return 0;
}

本文地址:https://blog.csdn.net/CHAI_NIAOJINJE/article/details/107370545

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网