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

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;
}

剩下的,没看题

posted @ 2017-08-27 23:50  伟大的蚊子  阅读(119)  评论(0编辑  收藏  举报