CodeForces#203(Div.2)- A,B,C

来源:互联网 发布:知乎回答能删除吗 编辑:程序博客网 时间:2024/05/17 02:20

A题  选一个最大时间,使得错题全都不能通过,对题全都能通过,并且至少有一个对题的通过时间的两倍小于最大时间。


代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>#include <vector>#include <map>#include <stack>#include <iostream>#define rep(i, x, y) for(int i = x; i < y; i++)using namespace std;int main() {    int n, m;    while(scanf("%d%d", &n, &m)!=EOF) {        int t;        int mina = 105, maxa = 0, minb = 105;        rep(i, 0, n) {            scanf("%d", &t);            mina = min(t, mina);            maxa = max(t, maxa);        }        rep(i, 0, m) {            scanf("%d", &t);            minb = min(t, minb);        }        if(mina * 2 >= minb || minb <= maxa) {            printf("-1\n");            goto a;        }        else printf("%d\n", max(mina * 2, maxa));    }    a: ;    return 0;}



B题  深搜+剪枝 来不及做了,等A了再上题解和代码。



C题  

扫雷,读完题发现直接按距离排序输出即可。


代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>#include <vector>#include <map>#include <stack>#include <iostream>#define LEN 100100typedef long long ll;using namespace std;struct P {    int x, y;    int step;}p[LEN];bool cmp(P a, P b) {    return a.step < b.step;}int main() {    int n;    while(scanf("%d", &n)!=EOF) {        ll cnt = 0;        for(int i = 0 ;i < n; i++) {            scanf("%d%d", &p[i].x, &p[i].y);            p[i].step = abs(p[i].x) + abs(p[i].y);            if(p[i].x) cnt += 2;            if(p[i].y) cnt += 2;            cnt += 2;        }        sort(p, p + n, cmp);        printf("%d\n", cnt);        for(int i = 0;i < n; i++) {            if(p[i].x > 0)                printf("1 %d R\n", p[i].x);            else if(p[i].x < 0)                printf("1 %d L\n", -1 * p[i].x);            if(p[i].y > 0)                printf("1 %d U\n", p[i].y);            else if(p[i].y < 0)                printf("1 %d D\n", -1 * p[i].y);            printf("2\n");            if(p[i].x > 0)                printf("1 %d L\n", p[i].x);            else if(p[i].x < 0)                printf("1 %d R\n", -1 * p[i].x);            if(p[i].y > 0)                printf("1 %d D\n", p[i].y);            else if(p[i].y < 0)                printf("1 %d U\n", -1 * p[i].y);            printf("3\n");        }    }    return 0;}