16年湖南训练赛,全是语文题

来源:互联网 发布:ubuntu vim找不到命令 编辑:程序博客网 时间:2024/05/01 22:36

http://blog.csdn.net/cww97?viewmode=contents

湖南省多校对抗赛(2016.03.06) [Cloned]

https://vjudge.net/contest/182059#overview

题没啥难度,读题半小时

这里写图片描述

C

题意是给个字符串。全是大写。问你要把这个字符串变成PERPERPER。。。

要替换多少个,看懂题意就可以秒了,签到题

F

题意:f个轨道,每个轨道可以任选起点,每次滑行一段距离,中间可以停顿,但是滑行中不能有停顿,轨道滑到头必须掉头,掉头需要1单位时间的停顿,中途可以随时掉头(当然也要停顿),也可以任意时刻停顿、

在这停顿,问是否可以在规定时间段内连续滑行

滚动数组更新n次

md一开始看时限20s,oxx说,写个大暴力,2的100次方,娘的20s,这个复杂度20年跑的完吗

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 111;const int M = 1e4 + 7;const int dx[] = {-1, 1};int a[N], n, m;bool vis[2][M];bool check(){    memset(vis, 1, sizeof(vis));    int u = 0;    for (int i = 0; i < n; i++){        //printf("i = %d\n", i);        for (int j = 0; j <= m; j++) vis[u^1][j] = 0;        for (int j = 0; j <= m; j++) if (vis[u][j]){            //printf("j = %d\n", j);            for (int k = 0; k < 2; k++){                int p = j + dx[k] * a[i];                if (0<=p && p<=m) vis[u^1][p] = true;            }        }        u ^= 1;    }    for (int i = 0; i <= m; i++) if (vis[u][i]) return true;    return false;}int main(){    //freopen("in.txt", "r", stdin);    int f, x, y;    bool poss = 1;    for (scanf("%d", &f); f--;){        scanf("%d%d", &m, &n);        for (int i = 0; i < n; i++){            scanf("%d%d", &x, &y);            a[i] = y - x;            if (a[i] > m) poss = 0;        }        if (!poss) continue;        if (!check()) poss = 0;    }    if (poss) puts("possible");    else puts("impossible");    return 0;}

G

题意:

皇家花园有好多哥布林,偷果子,守护者打开了喷水装置,哥布林怕水就撤了

每个哥布林在一个坐标上,每个喷水装置有坐标和喷水半径

未被喷到的哥布林不会撤退,问最后还剩多少个哥布林

做法:

不是很严谨,极限数据是很容易卡这个算法,

对哥布林按x坐标排序,对每个圆查r-x到r+x范围内的哥布林,然后删去

用multiset来存,每次操作为log的复杂度,删除也方便

几万年没写multiset,大部分时间都用在了查文档上

吐槽:本来哥布林用x和y双关键字排序,蜜汁wa,改的更粗暴之后反而蜜汁过了

#include <set>#include <cstdio>#include <iostream>using namespace std;const int N = 1e5 + 7;int n;int sqr(int x){return x*x;}struct point{ // Goblin    int x, y;    point (int _x, int _y):x(_x),y(_y){}    bool operator < (const point &b) const{        return x < b.x;    }    bool in(int cx, int cy, int r){        return sqr(cx-x) + sqr(cy-y) <= sqr(r);    }    inline void print(){        printf("(%d, %d)\n", x, y);    }};multiset <point> po;multiset <point>::iterator L, R, it;int main(){    //freopen("in.txt", "r", stdin);    int x, y, r, m;    scanf("%d", &n);    po.clear();    for (int i = 1; i <= n; i++){        scanf("%d%d", &x, &y);        po.insert(point(x, y));    }    scanf("%d", &m);    for (; m--;){        scanf("%d%d%d", &x, &y, &r);        L = po.lower_bound(point(x - r - 1, 0));        R = po.lower_bound(point(x + r + 1, 0));        //if (R == po.end()) R--;        //point p = *R; p.print();        //puts("-----");        for (; L != R;){            point p = *L; //p.print();            it = L;            L++;            if (p.in(x, y, r)) {                //p.print();                po.erase(it);            }            //printf("size = %d\n", po.size());        }    }    printf("%d\n", po.size());    return 0;}

剩下的,没看题

原创粉丝点击