Codeforces 1154 - A/B/C/D/E/F/G - (Undone)

13437 ワード

リンク:https://codeforces.com/contest/1154
A-Restoring Three Numbers-[水]
#include
using namespace std;

int a[4];
int main()
{
    cin>>a[0]>>a[1]>>a[2]>>a[3];
    sort(a,a+4);
    for(int i=0;i<=2;i++) printf("%d ",a[3]-a[i]);
}

 
B-Make Them Equal-[分類討論]
#include
using namespace std;
const int maxn=105;
int n;
int a[maxn];
bool vis[maxn];

bool check(int x,int p)
{
    for(int i=1;i<=n;i++)
    {
        if(a[i]+x==p || a[i]==p || a[i]-x==p) continue;
        return 0;
    }
    return 1;
}
int main()
{
    cin>>n;

    int cnt=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        if(!vis[a[i]]) vis[a[i]]=1, cnt++;
    }

    if(cnt==1){printf("0
"); return 0;} if(cnt==2) { int min1=0, min2=0; for(int x=1;x<=100;x++) { if(vis[x]) { if(min1==0) min1=x; else if(min2==0) min2=x; else break; } } int D; if((min2-min1)%2==0) D=(min2-min1)/2; else D=min2-min1; cout<endl; return 0; } int min1=0, min2=0, min3=0; for(int x=1;x<=100;x++) { if(vis[x]) { if(min1==0) min1=x; else if(min2==0) min2=x; else if(min3==0) min3=x; else break; } } if(min3-min2==min2-min1) { int D=min3-min2; if(check(D,min2)) cout<endl; else cout<1<<endl; } else cout<1<<endl; }

 
C - Gourmet Cat
#include
using namespace std;
typedef long long ll;

ll a,b,c;
ll run(int st)
{
    ll A=a, B=b, C=c;
    for(int i=st;i<=7;i++)
    {
        if(i==1 || i==4 || i==7)
        {
            if(A>0) A--;
            else return i-st;
        }
        else if(i==2 || i==6)
        {
            if(B>0) B--;
            else return i-st;
        }
        else if(i==3 || i==5)
        {
            if(C>0) C--;
            else return i-st;
        }
    }
    ll ans=7-st+1;
    ll num=min(min(A/3,B/2),C/2);
    ans+=num*7;
    A-=3*num, B-=2*num, C-=2*num;
    for(int i=1;;i++)
    {
        if(i==1 || i==4 || i==7)
        {
            if(A>0) A--;
            else return ans+i-1;
        }
        else if(i==2 || i==6)
        {
            if(B>0) B--;
            else return ans+i-1;
        }
        else if(i==3 || i==5)
        {
            if(C>0) C--;
            else return ans+i-1;
        }
    }
}
int main()
{
    cin>>a>>b>>c;
    ll ans=0;
    for(int st=1;st<=7;st++)
    {
        ll res=run(st);
        //printf("%d: %I64d
",st,res);
ans=max(ans,res); } cout<endl; }

 
D-Walking Robot-[欲張り]
 
E-Two Teams-[セグメントツリー+チェーンテーブル]
 
F - Shovels Shop - [DP]
 
G - Minimum Possible LCM - (Undone)