首页 > 代码库 > 【组队训练】2013南京区域赛

【组队训练】2013南京区域赛

大概是第四五次组队训练了。

四题。

第一次进铜牌线了= =(苦笑

A题,水题,队友看一会就敲了,1A。

 

J题,我看的,没看懂,叫队友和我一起看,三个人在没有讨论的情况下,全都理解错题意,凑不出样例,后来zr说,before和after应该是空间的,恍然大悟……

因为当RYB都>=2的时候有公式,我就直接分类讨论其他情况。写的……shi一样……wa了好几次,和zr一起找了半天,7A……

技术分享
#include <bits/stdc++.h>using namespace std;typedef long long ll;#define CLR(x, v) memset(x, v, sizeof x);#define PI(x) printf("%lld\n", (ll)(x))const int N = 100005;void sort(ll &a, ll &b, ll &c) {    ll x = min(a, min(b,c));    ll y = max(a, max(b,c));    ll z = (a+b+c)-x-y;    a = x; b = z; c = y;}int main() {    //freopen("in.txt", "r", stdin);    ll a, b, c;    while (~scanf("%lld%lld%lld", &a, &b, &c)) {        sort(a, b, c);        ll tot = a+b+c;        if (a >= 2 && b >= 2 && c >= 2) {            PI(15+(tot-6)*6);        } else if (c == 0) {            // zero color            PI(0);        } else if (b == 0) {            // one color            if(c == 1)            PI(0);            else            PI((tot-2)*2+1);        } else if (a == 0) {            // two colors            if (b == 1 && c == 1) PI(1);            else if (b == 1 && c == 2) PI(3);            else if (b == 1) PI(3+(c-2)*3);            else PI(6+(tot-4)*4);        } else {            if (b == 1 && c == 1) PI(3);            else if (b == 1) PI(6+(c-2)*4);            else if (b >= 2) PI(10+(b+c-4)*5);            else while (1);        }    }    return 0;}
View Code

 

I题,搞完J就开始看I题,队友说是不是什么数据结构,我想了下dp觉得没什么思路,便想到对每一位进行运算O(N^2*b) b是数据二进制位数,题面并没有说数据范围,我有点怕超时,和队友说了下想法,还是建议我写一发,因为也比较好写,抱着wa也不能空着的心态写了一下,调了下过了样例就交了,忘记写回车PE一次,2A。很惊喜。

技术分享
#include <bits/stdc++.h>using namespace std;typedef long long ll;#define CLR(x, v) memset(x, v, sizeof x);#define PI(x) printf("%lld\n", (ll)(x))const int N = 1005;int a[N];int bit[50], ans[50];int midx;int c[N][N];const int MOD = 1000003;int n;void up(int &x, int y) { if(y>x)x=y; }void add(int &x, int y) { x+=y; if(x>=MOD) x-=MOD; }void calc() {    c[0][0] = 1;    for (int i = 1; i < N; ++i) {        c[i][0] = c[i][i] = 1;        for (int j = 1; j < i; ++j) {            c[i][j] = (c[i-1][j] + c[i-1][j-1]) % MOD;        }    }}void init(int v) {    int idx = 0;    while (v) {        if (v&1) bit[idx]++;        v >>= 1;        idx++;    }    up(midx, idx);}void cal(int x) {    for (int i = 0; i < midx; ++i) {        for (int j = 1; j <= x && j <= bit[i]; j+=2) {            add(ans[i], (ll)c[bit[i]][j] * c[n-bit[i]][x-j] % MOD);        }    }}int main() {    //freopen("in.txt", "r", stdin);    calc();    while (~scanf("%d", &n)) {        CLR(bit, 0); midx = 0;        for (int i = 1; i <= n; ++i) {            scanf("%d",&a[i]);            init(a[i]);        }        //for (int i = 0; i < midx; ++i) printf("%d ", bit[i]);printf("\n");        for (int i = 1; i <= n; ++i) {            CLR(ans, 0); cal(i);            int res = 0;            for (int j = 0; j < midx; ++j) {                add(res, ((1LL<<j)%MOD*ans[j])%MOD);            }            //for (int j = 0; j < midx; ++j) printf("%d ", ans[j]);printf("\n");            printf("%d", res);            if (i != n) printf(" ");        }        printf("\n");    }    return 0;}
View Code

 

B题,ys看的,他在那里算了好久,问他看的怎么样,说差不多了,结果敲了好久,终于过了样例,提交,1A

我鼓掌,ys开心的跳起来,仿佛我们真的拿到了牌。

虽然路还有很远,但是还是惊喜于每一次AC,于是无论结果怎样,都…不会后悔。

 

之后zr在写C,写完了一直过不了样例,我不是很懂,也没办法帮他看,一直再看K题,事实证明那么少过的题,我是真的不行- -

计划明天补完K题。树分治。太弱,竟然没学过。。。

继续努力……

【组队训练】2013南京区域赛