其他分享
首页 > 其他分享> > Codeforces Round #693 (Div. 3)

Codeforces Round #693 (Div. 3)

作者:互联网

原题链接:https://codeforces.com/contest/1472

C. Long Jumps

用过了这个数就跳过,没有用过就接着加,最后ans取最大值

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=2e5+10;
int a[maxn];
int bj[maxn];
int main()
{
    int t;
    cin>>t;
    int n;
    while(t--)
    {
        cin>>n;
        memset(bj,0,sizeof(bj));
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            int anss=0;
            if(bj[i]==0)
            {
                for(int j=i;j<=n&&bj[j]==0;j+=a[j])
                {
                    anss+=a[j];
                    bj[j]=1;
                }
                ans=max(ans,anss);
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
View Code

D. Even-Odd Game

一开始想成拿自己这边最大的,那样是错误的,对敌人仁慈就是对自己残忍,正解应该是拿所有数里面最大的

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> 
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
int a[maxn];
int b[maxn];//ou Alice
int c[maxn];//ji
int main()
{
    int t,n;
    cin>>t;
    while(t--)
    {
        cin>>n;
        int num1=0,num2=0;
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        sort(a+1,a+n+1);
        int k=n,pd=1;
        ll ans1=0,ans2=0;
        while(k)
        {
            if(pd==1&&a[k]%2==0) ans1+=a[k];
            if(pd==-1&&a[k]%2==1) ans2+=a[k];
            k--;
            pd*=-1;
        }
        if(ans1==ans2) printf("Tie\n");
        else if(ans1>ans2) printf("Alice\n");
        else printf("Bob\n");
    }
    return 0;
}
View Code

E. Correct Placement

按照h排序,遍历的时候只找w更小的,因为后面的数h一定比前面的数的h大,h相等的情况不用考虑,一定不符合题意

现场只想到了n^2的算法,被无情hack

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=2e5+10;
struct node{
    int h,w,id;
}a[maxn];
int ans[maxn];
bool amp(node x,node y)
{
    if(x.h!=y.h) return x.h<y.h;
    else return x.w>y.w;
}
int main()
{
    int t,n;
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&a[i].h,&a[i].w);
            if(a[i].h>a[i].w) swap(a[i].h,a[i].w);
            a[i].id=i;
        }
        sort(a+1,a+n+1,amp);
        int minw=a[1].w;
        int flag=1;
        ans[a[flag].id]=-1;
        for(int i=2;i<=n;i++)
        {
            if(a[i].h>a[flag].h&&a[i].w>a[flag].w) ans[a[i].id]=a[flag].id;
            else ans[a[i].id]=-1;
            if(minw>a[i].w) 
            {
                minw=a[i].w;
                flag=i;
            }
        }
        for(int i=1;i<=n;i++) cout<<ans[i]<<" ";
        cout<<endl;    
    }
    return 0;
}
View Code

 

这场写了A~E,本来以为要加大分,但是C和E被hack,又觉得要掉大分,最终还是加分了

 

天为箩盖地为毯,日月星辰伴我眠;

什么人撒下名利网,富贵贫困不一般;

也有骑马与坐轿,也有推车把担担;

骑马坐轿修来的福,推车担担命该然;

骏马驮着痴呆汉,美妇人常伴拙夫眠;

八十老翁门前站,三岁顽童染黄泉;

不是老天不睁眼,善恶到头报应循环。

标签:693,int,Codeforces,cin,flag,maxn,Div,include,id
来源: https://www.cnblogs.com/standard/p/14320254.html