欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Atcoder abc 160 (A~E)

程序员文章站 2022-07-03 18:18:19
AA题链接题意:第三第四一样,第五第六位一样则输出yes,否则NO模拟即可AC代码:#include #include #include #include#include #include typedef long long ll;using namespace std;int main(){...

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

相关标签: Atcoder