CF720A Closing ceremony 贪心

Posted lqsukida

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF720A Closing ceremony 贪心相关的知识,希望对你有一定的参考价值。

正解:贪心

解题报告:

传送门!

先考虑如果只有一列怎么搞?那就肯定是尽量走到最远的地方

然后用点儿类似的思想,现在考虑有两列的情况QAQ

为了方便表述,这里给每个位置两个值,a表示离一号入口的距离,b表示离二号入口的距离

可以先把从一号入口进去的安排了,所以考虑按体力从小往大考虑,然后在能满足a的情况下尽量选b比较大的位置

然后再处理二号入口的,就按体力从大往小考虑一下就好

具体实现的话就先把所有坐标按a排序,然后满足的就加入堆,堆的内部按b排序就好

over

先放个还没有A的代码我等下再改过来QAQ

技术图片
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rc register char
#define rb register bool
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)

const int N=10000+100;
int n,m,k,a[N],nw=1,nod_cnt;
struct node{int x,y,disa,disb;}nod[N];
il bool operator < (node gd,node gs){return gd.disb<gs.disb;}
priority_queue<node>Q;

il int read()
{
    rc ch=gc;ri x=0;rb y=1;
    while(ch!=- && (ch>9 || ch<0))ch=gc;
    if(ch==-)ch=gc,y=0;
    while(ch>=0 && ch<=9)x=(x<<1)+(x<<3)+(ch^0),ch=gc;
    return y?x:-x;
}
il bool cmp(node gd,node gs){return gd.disa<gs.disa;}
il bool cmq(ri gd,ri gs){return gd>gs;}

int main()
{
    n=read();m=read();rp(i,1,n)rp(j,1,m)nod[++nod_cnt]=(node){i,j,i+j,i+m+1-j};sort(nod+1,nod+1+nod_cnt,cmp);
    k=read();rp(i,1,k)a[i]=read();sort(a+1,a+1+k);
    rp(i,1,k){while(a[i]>=nod[nw].disa && nw<=nod_cnt)Q.push(nod[nw++]);if(Q.empty())return printf("NO
"),0;Q.pop();}
    while(nw<=nod_cnt)Q.push(nod[nw++]);
    k=read();rp(i,1,k)a[i]=read();sort(a+1,a+1+k);
    my(i,k,1){if(a[i]<Q.top().disb)return printf("NO
"),0;Q.pop();}
    printf("YES
");
    return 0; 
}
这儿是代码QwQ

以上是关于CF720A Closing ceremony 贪心的主要内容,如果未能解决你的问题,请参考以下文章

codeforces 720A:Closing ceremony

by closing的用法

[ 9.22 ]CF每日一题系列—— 484A Bits

Lightoj 1011 - Marriage Ceremonies

(状压) Marriage Ceremonies (lightOJ 1011)

lightoj-1011 - Marriage Ceremonies(状压dp)