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

【组队训练】2013天津区域赛

三题,按现场排名应该是80名,铜牌靠后。

几次训练发现自己的心理素质实在是太!差!了!一开始,老规矩,我k题,zrA题,ysB题。

A题大模拟,比较费时,zr先看了过了几个人的H,31mins,1A

B题过的人越来越多,我看了N久终于看懂K题……不会做……我去问ys怎么样,他说了下题意,我觉得很水的暴力,让他直接写,他一直在和我讲说复杂度不够。我有点不耐烦,直接上机写。写的过程中出了点小问题,不过还是水题,一个小时左右1A

技术分享
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <vector>#include <iostream>using namespace std;typedef long long ll;const int N = 1000005;const int INF = 0x5f5f5f5f;const int MOD = 1000000007;ll cal(int x, int m) {    ll ans = 0;    int f = m;    while (x) {        int z = x%m;        ans += z*z;        x /= m;    }    return ans;}void output(ll x, int m) {    char ans[100]; int idx = 0;    while (x) {        int z = x%m;        if (z < 10) ans[idx++] = z + 0;        else ans[idx++] = z - 10 + A;        x /= m;    }    for (int i = idx-1; i >= 0; --i) printf("%c", ans[i]); printf("\n");}void solve(int n, int m) {    ll ans = 0;    int lit = sqrt(n);    for (int i = 1; i <= lit; ++i) {        if (n % i == 0) {            ans += cal(i, m);            if (i != n/i) ans += cal(n/i, m);        }    }    output(ans, m);}int main() {    //freopen("in.txt", "r", stdin);    int n, m;    while (~scanf("%d%d", &n, &m)) {        solve(n, m);    }    return 0;}
View Code

然后看C题,我直接想到dp方程dp[i][j][k]表示前i个数已经排好,i+1是j,i+2是k的最小步数。但是转移方程没想好。和队友说了一下开始写,快写好的时候队友看了一眼,说由各情况没有考虑到,我一想确实是,心情瞬间就很烦躁,队友和我说思路的时候我不是很想理他,心情很烦,因为觉得全写错了(实际上只是差了一点),直接和队友说你有思路你写把,我不管了/我去想E,结果没想出来,后来队友说C他写错了,我已经想明白了,写了一发之后出了点bug,最后两个字母的旋转没考虑,上了个厕所突然明白,n+2之后解决,一共用了一个小时左右,1A

技术分享
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <vector>#include <iostream>using namespace std;typedef long long ll;const int N = 1005;const int INF = 0x5f5f5f5f;const int MOD = 1000000007;char a[N], s[N];int dp[N][30][30];int move(int p, int x) {    return (p+x+10)%10;}void mi(int &x, int y) {    if (x == -1 || x > y) x = y;}int step(int x, int y) {    if (x>y) swap(x, y);    return min(y-x, x+10-y);}int main(){    //freopen("in.txt", "r", stdin);    while (~scanf("%s%s", a+1, s+1)) {        int n = strlen(a+1);        for (int i = 1; i <= n; ++i) {            a[i]-=0; s[i]-=0;        }        n+=2;        memset(dp, -1, sizeof dp);        dp[0][a[1]][a[2]] = 0;        for (int i = 0; i <= n-2; ++i) {            for (int j = 0; j <= 9; ++j) {                for (int k = 0; k <= 9; ++k) {                    if (dp[i][j][k] < 0) continue;                    for (int p = -4; p <= 5; ++p) {                        for (int q = -4; q <= 5; ++q) {                            int x = move(j, p+q);   //i+1                            int y = move(k, p+q);   //i+2                            int z = move(a[i+3], q);//i+3                            int sp = step(x, s[i+1]);                            mi(dp[i+1][y][z], dp[i][j][k] + sp + abs(p) + abs(q));                        }                    }                }            }        }        int ans = INF;        for (int i = 0; i <= 9; ++i) {            for (int j = 0; j <= 9; ++j) {                if (dp[n-2][i][j] >= 0)                ans = min(ans, dp[n-2][i][j]);            }        }        printf("%d\n", ans);    }    return 0;}
View Code

这时就剩半个小时了,他们两个在讨论A,其实我也看了,不过也没相处什么清晰的写法,就挂机了。zr尝试着写,结果还是除了问题,没能在比赛结束前写完。

 

我觉得我如果C题队友提醒我错了的时候,冷静下来好好想想,而不是硬拉着队友写,自己逃避,会减少很多浪费时间。只能说队友脾气都很好,没有生气,如果都像我这么情绪化……估计会打起来。。。。

以后一定要学会克制自己的负面情绪。。。克制。。克制。。

 

----

计划补题:E图论 F后缀自动机 Ksplay+线段树 //马丹 怎么都是我的

 

任重而道远阿~~~

【组队训练】2013天津区域赛