CSP2024 游记

wwqwq

2024-09-21 13:16:28

Life & Travel

rp++

保龄寄(确信

初赛

Day 1

别问之前为什么没写,问就是电脑被收了qwq。

上午J组

原本不想报的,但是老师要求全都要报,只能给CCF捐50了(悲

开考,直接乱选,毕竟去年已经J1=了,进不进无所谓(不想再给CCF捐钱了)。

T3组合数学,先跳过。

格雷码是什么东西???T4蒙A。

又考先中后序遍历啊啊啊不会啊啊啊,T12蒙C。

阅读程序被T22秒了,RE不是编译错误!!!

答案没记,至少错一题。

完善程序第一题第一小题就错啊啊啊我是**。

第二题没看,全蒙的C

出来对答案,完善程序第二题答案是BBBBC,五错四!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

趋势。。。。。。

估分连八十都没上。。。

没关系当加rp了。

下午S组

中午喝了咖啡。

好难,心态炸了,全蒙错。

估分42.5。

Day 10

出分数线,用老人机查的。

J 76,过了。

S 45!!!!!!!!!!!!!!!!!!

就差2.5!!!!!!!!!!!!!!!!

要是不蒙D或不蒙×就过了……

没关系,明年再来!

复赛

Day 0

板子都没背啊啊啊。

Day 1

上午J组

T1水题判重即可,T2小模拟,还读错题了。。。

T3发现没有大样例,感觉可能是因为答案有规律。玄学做法。

T4没看。

玩小恐龙,5006分。

估分 [230,300]

中午吃饭

没去食堂,怕没开,去吃寿司,花38,贵死。。。

下午S组

我是用奖励名额的**。

好紧张啊啊啊。

开题看T1直接懵,比去年T1还简单???五分钟做完。

T2乱口胡了一下,感觉可做,直接死磕。

二分,二分,二分,二分。

一通乱搞,过了前四个样例。

去厕所找灵感,好像知道错哪了,赶紧回去写。

又一通乱搞,码风良好,但是可能只有自己读得懂。

过所有样例,但是样例五3.2s,时限2s,有点慌。

想到之前用这台电脑跑 O(n),n=10^6 超时,心情好点。

然后没时间看T3和T4了。。。

估分 [100,200]

晚上讨论

听说T2没判断ans1为0会20???

Day 2

测民间,S 200!!!

但是T2好像被hack了,不管了,赌一手CCF数据强度。

Day 3

听说J估分290,FJ省200名开外了。。。不知道能不能一等,当然不拿也行。

S T2还是没调出来,炸了。

Day 不知道多少

双1=,六级勾。

代码:

CSP-J

poker

#include <bits/stdc++.h>

using namespace std;

bool p[10][30];

int qwq1(char c) {
    if (c == 'D') return 1;
    if (c == 'C') return 2;
    if (c == 'H') return 3;
    if (c == 'S') return 4;
}

int qwq2(char c) {
    if (c == 'A') return 1;
    if (c == '2') return 2;
    if (c == '3') return 3;
    if (c == '4') return 4;
    if (c == '5') return 5;
    if (c == '6') return 6;
    if (c == '7') return 7;
    if (c == '8') return 8;
    if (c == '9') return 9;
    if (c == 'T') return 10;
    if (c == 'J') return 11;
    if (c == 'Q') return 12;
    if (c == 'K') return 13;

}

int main() {
    freopen("poker.in", "r", stdin);
    freopen("poker.out", "w", stdout);
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        char a, b;
        cin >> a >> b;
        p[qwq1(a)][qwq2(b)] = 1;
    }
    int ans = 0;
    for (int i = 1; i <= 4; i++) {
        for (int j = 1; j <= 13; j++) {
            if (p[i][j] == 0) ans++;
        }
    }
    cout << ans << endl;
    return 0;
}

explore

#include <bits/stdc++.h>

using namespace std;

int n, m, k;
char Map[1005][1005]; 
bool zg[1005][1005];

struct node {
    int x, y;
};

void init() {
    for (int i = 0; i < 1005; i++) for (int j = 0; j < 1005; j++) {
        Map[i][j] = 0;
        zg[i][j] = 0;
    }
    return ;
}

node qwq(node a, int zx) {
    node res = a;
    if (zx == 0) res.y++;
    if (zx == 1) res.x++;
    if (zx == 2) res.y--;
    if (zx == 3) res.x--;
    return res;
}

bool ok(node a) {
    if (a.x < 1 || a.x > n || a.y < 1 || a.y > m) return 0;
    if (Map[a.x][a.y] == 'x') return 0;
    return 1;
}

int main() {
    freopen("explore.in", "r", stdin);
    freopen("explore.out", "w", stdout);
    int T;
    cin >> T;
    while (T--) {
        init();
        cin >> n >> m >> k;
        node xz;
        int d;
        cin >> xz.x >> xz.y >> d;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                cin >> Map[i][j];
            }
        }

        zg[xz.x][xz.y] = 1;
        while (k--) {
            node res;
            res = qwq(xz, d);
            if (ok(res)) {
                xz = res;
                zg[xz.x][xz.y] = 1;
            }
            else {
                d = (d + 1) % 4;
            } 
        }
        int ans = 0;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                ans += zg[i][j];
            }
        }
        cout << ans << endl;
    }
    return 0;
}

sticks

#include <bits/stdc++.h>

using namespace std;

string ans;

int main() {
    freopen("sticks.in", "r", stdin);
    freopen("sticks.out", "w", stdout);
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        if (n == 1) {
            cout << -1 << endl;
            continue;
        }
        if ((n % 7) == 0) {
            for (int i = 1; i <= n / 7; i++) cout << 8;
            cout << endl;
            continue;
        }
        if (n == 10) {
            cout << 22 << endl;
            continue;
        }
        while (n > 14) {
            n -= 7;
            if (n != 10) ans = ans + "8";
        }
        if (n == 2) ans = "1" + ans;
        if (n == 3) ans = "7" + ans;
        if (n == 4) ans = "4" + ans;
        if (n == 5) ans = "2" + ans;
        if (n == 6) ans = "6" + ans;
        if (n == 7) ans = "8" + ans;
        if (n == 8) ans = "10" + ans;
        if (n == 9) ans = "18" + ans;
        if (n == 10) ans = "200" + ans;
        if (n == 11) ans = "20" + ans;
        if (n == 12) ans = "28" + ans;
        if (n == 13) ans = "68" + ans;
        if (n == 14) ans = "88" + ans;
        cout << ans << endl;
        ans = "";
    }
    return 0;
} 

CSP-S

duel

#include <bits/stdc++.h>

using namespace std;

int in;
int cnt[100005];

int main() {
    freopen("duel.in", "r", stdin);
    freopen("duel.out", "w", stdout);
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> in;
        cnt[in]++;
    }
    int ans = 0;
    for (int i = 1; i <= 100000; i++) {
        if (cnt[i] >= ans) ans = cnt[i];
    }
    cout << ans << endl;
    return 0;
} 

detect

#include <bits/stdc++.h>

using namespace std;

long long n, m, l, v;
struct node {
    long long d, v, a;
}c[100005];
long long p[100005];
long long cs[100005];

struct qj {
    long long l, r;
}q[100005], fq[100005];
long long top, top2;

long long Min[100005];
long long b[1000005], qh[1000005];
long long cf[1000005];

void init() {
    top = 0;
    top2 = 0;
    for (long long i = 0; i < 100005; i++) {
        cs[i] = 0;
        q[i].l = 0;
        q[i].r = 0;
        fq[i].l = 0;
        fq[i].r = 0;
        Min[i] = 0;
    }
    for (long long i = 0; i < 1000005; i++) {
        b[i] = 0;
        qh[i] = 0;
        cf[i] = 0;
    }
    return ;
} 

long long B_S1(long long l, long long r, long long qwq) {//找距qwq点正方向最近的测速仪 
    if (l == r) return l;
    long long mid = (l + r) / 2;
    if (p[mid] >= qwq) return B_S1(l, mid, qwq);
    else return B_S1(mid + 1, r, qwq);
} 

long long B_S2(long long l, long long r, long long qwq) {
    if (l == r) return l;
    long long mid = (l + r) / 2;
    if (c[qwq].v * c[qwq].v + 2 * c[qwq].a * (p[mid] - c[qwq].d) > v * v) return B_S2(l, mid, qwq);
    else return B_S2(mid + 1, r, qwq);
}

long long B_S3(long long l, long long r, long long qwq) {
    if (l == r) return l;
    long long mid = (l + r + 1) / 2;
    if ((c[qwq].v * c[qwq].v + 2 * c[qwq].a * (p[mid] - c[qwq].d) <= v * v) || (c[qwq].v * c[qwq].v + 2 * c[qwq].a * (p[mid] - c[qwq].d) < 0)) return B_S3(l, mid - 1, qwq);
    else return B_S3(mid, r, qwq);
}

bool cmp(qj a, qj b) {
    if (a.l != b.l) return a.l < b.l;
    return a.r > b.r;
}

long long B_S4(long long l, long long r, long long qwq) {
    if (l == r) return l;
    long long mid = (l + r + 1) / 2;
    if (cf[mid] <= qwq) return B_S4(mid, r, qwq);
    else return B_S4(l, mid - 1, qwq);
}

int main() {
    freopen("detect.in", "r", stdin);
    freopen("detect.out", "w", stdout);
    long long T;
    cin >> T;
    while (T--) {
        init();

        scanf("%lld %lld %lld %lld", &n, &m, &l, &v);
        for (long long i = 1; i <= n; i++) {
            scanf("%lld %lld %lld", &c[i].d, &c[i].v, &c[i].a);
        }
        for (long long i = 1; i <= m; i++) scanf("%lld", &p[i]);
        long long cnt = 0;
        for (long long i = 1; i <= n; i++) {
            if (p[m] < c[i].d) continue;
            if (c[i].a > 0) {
                if (c[i].v * c[i].v + 2 * c[i].a * (p[m] - c[i].d) > v * v) {
                    cs[++cnt] = i;
                }
            }
            if (c[i].a == 0) {
                if (c[i].v > v) cs[++cnt] = i;
            }
            if (c[i].a < 0) {
                long long res = B_S1(1, m, c[i].d);
                if (c[i].v * c[i].v + 2 * c[i].a * (p[res] - c[i].d) > v * v) {
                    cs[++cnt] = i;
                }
            }
        }
        cout << cnt << ' ';

        long long Max = -1;
        for (long long awa = 1; awa <= cnt; awa++) {
            long long i = cs[awa];
            if (c[i].a >= 0) {
                long long qd = B_S1(1, m, c[i].d);
                long long res = B_S2(qd, m, i);
                Max = max(Max, res);
            }
            else {
                long long l = B_S1(1, m, c[i].d);
                long long r = B_S3(l, m, i);
                q[++top].l = l;
                q[top].r = r;
            }
        }
        if (Max != -1) {
            q[++top].l = Max;
            q[top].r = m;
        }
        sort(q + 1, q + top + 1, cmp);
        Min[top + 1] = 2147483647;
        for (long long i = top; i >= 1; i--) Min[i] = min(Min[i + 1], q[i].r);
        for (long long i = 1; i <= top; i++) {
            if (q[i].r >= Min[i + 1]) continue;
            fq[++top2] = q[i];
        }

//      if (T == 16) for (long long i = 1; i <= top2; i++) cout << "qwq   " << fq[i].l << ' ' << fq[i].r << endl;

        for (long long i = 1; i <= top2; i++) {
            b[fq[i].r]++;
        }
        qh[0] = 0;
        for (long long i = 1; i <= p[m]; i++) {
            qh[i] = qh[i - 1] + b[i];
        }
        long long pl = 0;
        for (long long i = 1; i <= top2; i++) {
            long long res = B_S4(0, pl, fq[i].l - 1);
            //////////////
            if (qh[fq[i].r] - (pl - res) - qh[fq[i].l - 1] > 1) {
                cf[++pl] = fq[i].r;
//              cout << "1111    " << fq[i].l << ' ' << fq[i].r << "    1111" << endl;
            }
        }
        cout << m - (qh[p[m]] - pl) << endl;
    }
    return 0;
} 

/*
1
5 5 15 3
0 3 0
12 4 0
1 1 4
5 5 -2
6 4 -4
2 5 8 9 15

3 3
*/