BZOJ4723——[POI2017]Flappy Bird

来源:互联网 发布:java可以做数据挖掘吗 编辑:程序博客网 时间:2024/04/30 01:42

1、题意:按照flappy bird的规则求从原点到某一列最少点几次屏幕
2、分析:到某一点的点击次数固定,所以维护每个柱子中间可以到达的范围就好,最后只要通过最后一个障碍物就好,掉落到哪里无所谓。

#include <map>#include <set>#include <cmath>#include <queue>#include <vector>#include <bitset>#include <string>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define M 1000010#define LL long long#define MOD 1000000007#define inf 2147483647#define llinf 4000000000000000000ll#define For(i, x, y) for(int i = (x); i < (y); i ++)#define rep(i, x, y) for(int i = (x); i <= (y); i ++)#define drep(i, x, y) for(int i = (x); i >= (y); i --)inline int read(){    char ch=getchar();int x=0,f=1;    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*f;}inline LL llread(){    char ch=getchar();LL x=0,f=1;    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*f;}struct Node{    int x, a, b;} a[M];int nowx, nowy;int main(){    //freopen("0input.in", "r", stdin);    int n = read(), X = read();    rep(i, 1, n) a[i] = (Node){read(), read(), read()};    rep(i, 1, n) a[i].a ++, a[i].b --;    rep(i, 1, n){        int cha = a[i].x - a[i - 1].x;        nowx -= cha; nowy += cha;        nowx = max(nowx, a[i].a);        nowy = min(nowy, a[i].b);        if((a[i].x & 1) != (nowx & 1)) nowx ++;        if((a[i].x & 1) != (nowy & 1)) nowy --;        if(nowx > nowy) return puts("NIE"), 0;    }    printf("%d\n", (nowx + a[n].x) / 2);    return 0;}
0 0
原创粉丝点击