CSP-J/S 2024

· · 生活·游记

流水账一样。

J1/S1

霜时种雪枯湖校区
J 11-13
S 6-15

9.20 前的某一天

得知在双十考。

?去年双十的还在一中考呢,今年整什么活。

回来吧厦门一中,我最骄傲的信仰,后面忘了。

9.20

接通知,下午第三节下课后去机房。

但是第四节考物理。

冲过去,听了一些东西,冲回来,别人物理都写一大堆了。

物理倒一练书法。

晚自习到机房写了三个小时,J23 做的比去年低,一道黄搜索写挂了。

9.21

00:30 睡觉。

6:40 - 7:00,5 min 一个闹钟。

起得比闹钟早。

七点半到学校绿网,写写写。

J22 写了 80.5。

随便看看主定理啥的,考试去了。

旁边的人一直吸鼻涕。

T1T2 滞涨题。

T3 给卡住了,过。

T4 不会,选个 A。

T5-13 滞涨题。

T14 比 T3 简单。

T15-37 滞涨题。

T38-41 不会捏,手玩半天没看懂这是怎么搜的。

回去 T3 爆算,B。

哇,改题了,CCF 你有脑子吗,去年改树遍历,今年还改树遍历,今年改题的还更多。

T4 改了 D。

敲铃。

对答案,哇咕 88,只有倒一错四个捏。

机房一堆小朋友吊打我 /kk。

全世界是不是只有我不会写倒一。

今年怎么连复杂度都没考(那个二分 \log n 也许能算?

中午食堂二楼狂炫傻叉面,回机房刷手机。

三楼机房就我一个高中生待着,剩下的是一群小朋友。

下楼拍照,外边一中外套,里边双十短袖,穿着这身拍了照。

14:05 进考场,发现考场里连小朋友都没有,基本上都是中学生,氛围都不一样了。

通用技术的老师监考诶。

发卷,瞄了眼前十五题,感觉还行。

翻后边,感觉不行。

写写写。

煞笔 linux。

组合数学题比 J 简单。

图论题找半天只找到三个边集。

后边不会,开蒙。

考完回班自习至十点。

啸兔零估分 88 + 62.5。

回家路上看到有泄题还有原,吃瓜。

9.27

88 + 54.5,差不多是俩都过了。

啸兔零不行啊你。

J2/S2

FJ-J01390 2-28
FJ-S01014 4-5

10.26

0:00-6:30 优质睡眠。

7:30 多到的学校,去让你飞起来音乐厅。

随便背两下板子,刷会手机进考场了。

上楼梯发现双十校庆时放体育馆门口的留言板就在旁边。

考场二,是平时上信息课的机房。

搞什么,开考后 3min 才看到题。

T1 map 5min 切了。

T2 第一眼以为是搜,发现就一枚举。

T3 这种木棍题,我记得我在锣鼓做过类似的,但没 AC。

特殊性质你是看都不看一眼啊,打个爆搜就不管了。

我草这 T4 无敌难吧,爆搜。

11:17 写完四题,开始摸鱼,写点小鲜花。

给每个程序都加了一句话,这里就不放出来了。

T1 默写《晴天》。

T2 默写《厦门一中,我的骄傲》。

T3 默写《厦门双十中学校歌》。

T4 默写《琵琶行》,但没默完。

好困,一场考试打了好几个哈欠。

反复看文件读写 文件位置 frc 看了好几遍。

结束,走人。

刚出信息楼就被拦下来抓去拍照了。

热死了热死了热死了热死了热死了。

发现 T3 是分讨题,似。

T2 有人用搜,不知道我纯枚举行不行。

晚上锣鼓民间测了 100+100+0+5,谔谔。

成人高考把大半个学校都给封住了,以为食堂没开,从学校外边长途跋涉准备去吃晨间厨房,发现食堂其实有开。

点了碗刀削面,15r,豪赤,但嘴里爆溃疡,痛死了痛死了。

感谢食堂阿姨提醒我身份证掉了。

4.8r 一瓶元气水,润到音乐厅。

手机剩下 50% 左右的电,找了个旁边有插座的位置,接上线发现根本没通电,差评。

睡觉。

小登好吵。

听周杰伦。

还没到点,lrx 把我叫起来了 /fn。

看一眼板子进考场了。

咋又是子真监考,两技术不分家是吧。

第二考场有霜时最新设备,好评。

没开考就发了文件,好评。

开题,看 T1,第一眼栈,第二眼枚举,第三眼栈,第四眼双端队列,第五眼 vector 枚举。

差不多就是统计每个 r_i 的人数,排序后 r_i \leftarrow [r_i < r_{i-1}] \times (r_{i - 1} - r_i),最后输出 r_n

用了 50min。

T2 还放个物理题,顺便新学了个 v_1=\sqrt{v_0^2 + 2as}

感觉还行,但越写越不对劲,这东西就 tm 是处理区间啊,我不会啊写个集贸,打个暴力和性质 A 就润 T3 了。

T3 还改题了,牛逼。

显然的 dp,但方程推不出来,遂搜之。

T4 又臭又长,全输出 0。

晚上测了民间数据 100 + 20 + 20 + ?

在音乐厅里和编程社社长 uuk 面积,顺便打了一小会 arc 和 phi。

回到信息楼看那个校庆的留言板,看到个很可爱的图案。

刷朋友圈看见一中机房还在用 win7。

两个差不多都是 1= 或 2=,不知道能不能混个 noip 去打,还能翘几天课。

差不多就这些罢,出分再更些。

code

出于某些原因,代码中有些不能看的地方会用五个星号覆盖。

你要看的话自己去找代码公示。

#include <bits/stdc++.h>

using namespace std;

int n, ans = 52;
string s;
map<string, bool> p;

int main() {

    freopen("poker.in", "r", stdin);
    freopen("poker.out", "w", stdout);

    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> s;
        if (!p[s]) {
            p[s] = 1;
            ans--;
        }
    }
    cout << ans;

    return 0;
}
/*
11:17 写完四题,来写点鲜花。
T1 显然地比去年简单多了,回想去年,我在 J23 的考场上因为牛魔小苹果卡了大半场考试。
赞美 ccf(

*****
*/ 

/*
来给大家整个活。

故事的小黄花
从出生那年就飘着
童年的荡秋千
随记忆一直晃到现在
25571765
5677776765
吹着前奏望着天空
我想起花瓣试着掉落
为你翘课的那一天
花落的那一天
教室的那一间
我怎么看不见
消失的下雨天
我好想再淋一遍
没想到失去的勇气我还留着
好想再问一遍
你会等待 还是离开
刮风这天 我试过握着你手
但偏偏 雨渐渐 大到我看你不见
还要多久 我才能在你身边
等到放晴的那天也许我会比较好一点
从前从前 有个人爱你很久
但偏偏 风渐渐 把距离吹得好远
好不容易 又能再多爱一天
但故事的最后你好像还是说了  
*/ 
#include <bits/stdc++.h>
#define db cout<<"IAKIOI\n"

using namespace std;

int t;
int n, m, k, x, y, d;
char a[1001][1001];
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0}; 
bool f[1001][1001];

int main() {

    freopen("explore.in", "r", stdin);
    freopen("explore.out", "w", stdout);

    cin >> t;
    while (t--) {
        memset(f, 0, sizeof f);
        int cnt = 1;
        cin >> n >> m >> k >> x >> y >> d;
        f[x][y] = 1;
        //cout << "d = " << d << '\n'; 
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= m; ++j) {
                cin >> a[i][j];
            }
        }
        for (int i = 1; i <= k; ++i) {
            //cout << x << ' ' << y << ' ' << d << ' ';
            int mx = dx[d] + x, 
                my = dy[d] + y;
            //cout << mx << ' ' << my << '\n';
            if (!mx || !my || mx > n || my > m || a[mx][my] == 'x') {
                d = (d + 1) % 4;
                //cout << i << '\n';
            }
            else {
                x = mx;
                y = my;
                if (!f[x][y]){
                    ++cnt;
                    f[x][y] = 1;    
                }
                //cout << mx << ' ' << my << '\n';
                //cout << i << '\n';
            }
        }
        cout << cnt << '\n';
    }

    return 0;
}

/*
第一眼还以为是个搜,结果连搜都不是。
显然比 J23 T2 简单。
我至今还没理解 J23 T2 是怎么写的。 

*****
*/ 

/*
来给大家整个活。

第一是我的骄傲
我喜欢在阳光中舞蹈
第一是我的骄傲
我不怕在风雨中奔跑
第一是我的骄傲
你说梦想前进号角
第一是我的骄傲
你说把勤毅诚敏 在心中记牢
在美丽传奇的鹭岛
听声声不息的浪潮
成长路上 恰同学年少
那奔流而去的岁月
那依然沸腾的热血
激荡我们 年轻的心跳
第一是我的骄傲
我喜欢在阳光中舞蹈
第一是我的骄傲
我不怕在风雨中奔跑
第一是我的骄傲
你说梦想前进号角
第一是我的骄傲
我要把民族复兴 在心中记牢
当南风吹动树梢
当朝阳掠过飞鸟
第一激励着我 奋发赶超
当出发那天来到
我们奔向天涯海角
回头望望 你是我永远的怀抱 
当南风吹动树梢
当朝阳掠过飞鸟
第一激励着我 奋发赶超
当出发那天来到
我们奔向天涯海角
回头望望 你是我永远的怀抱 
厦门一中 是我的骄傲 
*/ 
#include <bits/stdc++.h>

using namespace std;

int t, n, minlen = *****;
int p[] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
        // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
int q[] = {8, 0, 6, 9, 2, 3, 5, 4, 7, 1};
        // 7, 6, 6, 6, 5, 5, 5, 4, 3, 2
string _[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
vector<string> r;

bool cmp(string x, string y) {
    int len1 = x.size(), len2 = y.size();
    if (len1 == len2) return x < y;
    else {
        return len1 < len2;
    }
}

void dfs(int k, int s, string num) {
    if (s > minlen) return;
    if (k < 0) {
        return;
    }
    if (!k) {
        r.push_back(num);
        minlen = min((int)num.size(), minlen);
        return;
    }
    for (int i = 0; i <= 9; ++i) {
        dfs(k - p[i], s + 1, num + (char)(i + '0'));
    }
    return;
}

int main() {

    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0); 

    freopen("sticks.in", "r", stdin);
    freopen("sticks.out", "w", stdout);

    cin >> t;
    while (t--) {
        minlen = 998244353;
        r.clear();
        cin >> n;
        if (n < 2) {
            cout << "-1\n";
            continue;
        }
        for (int i = 1; i <= 9; ++i) {
            if (!q[i]) continue;
            dfs(n - p[q[i]], 1, _[q[i]]);
        }
        sort(r.begin(), r.end(), cmp);
        //for (auto i : r) cout << i << '\n';
        cout << r[0] << '\n';
    }

    return 0;
}

/*
到这里其实有点开摆的心态了,写了个爆搜懒得改了,过了样例直接开 T4 了。 

*****
*/ 

/*
来给大家整个活。

钦吾侪 学生雍融相聚一堂
鹭岛上 鹿洞旁 共研磨 发奋图强
习琴书 和弦歌 乐未央
一班班 一行行 气象煌
勤毅信诚 敬业乐群
同学记着勿相忘
努力为国争荣光 
*/ 
#include <bits/stdc++.h>
#define db cout<<"IAKIOI\n"

using namespace std;

const int N = 1e5 + 3;

int T, n, k, q, l[N], r, c;
vector<int> t[N];
map<int, int> p[N];
bool v[200001], flg;

void dfs(int f, int d, int lst) {
    if (d == r) {
        flg = (f == c && !flg);
        //cout << " f and c = " << f << ' ' << c << '\n'; 
        return;
    }
    for (int i = 1; i <= n; ++i) {
        if (i == lst) continue;
        if (!p[i][f]) continue;
        for (int j = 0; j < l[i]; ++j) {
            if (t[i][j] == f) {
                for (int h = j + 1; h - j < k && h < l[i]; ++h) {
                    dfs(t[i][h], d + 1, i);
                }
            }
        }
    }
    return;
}

int main() {

    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0); 

    freopen("chain.in", "r", stdin);
    freopen("chain.out", "w", stdout);

    cin >> T;
    while (T--) {

        cin >> n >> k >> q;
        for (int i = 1; i <= n; ++i) {
            cin >> l[i];
            for (int j = 1; j <= l[i]; ++j) {
                cin >> r;
                v[r] = 1;
                p[i][r] = j;
                t[i].push_back(r);
            }
        }
        while (q--) {
            flg = 0;
            cin >> r >> c;
            if (!v[c]) {
                cout << "0\n";
            }
            else {
                for (int i = 1; i <= n; ++i) {
                    if (flg) break;
                    for (int j = 0; j < l[i]; ++j) {
                        if (flg) break;
                        if (t[i][j] == 1) {
                            for (int h = j + 1; h - j < k && h < l[i]; ++h) {
                                dfs(t[i][h], 1, i);
                                //cout << i << ' ' << t[i][h] << '\n';
                                if (flg) break;
                                //cout << " i = " << i << '\n' << " j = " << j << '\n' << " h = " << h << '\n';
                                //cout << " t[i][h] = " << t[i][h] << '\n';
                            }
                        }
                    }
                }
                cout << flg << '\n';
            }
        }
        memset(v, 0, sizeof v);
        for (int i = 1; i <= n; ++i) t[i].clear(), p[i].clear();
    }

    return 0;
}
/*
用 fc 跑了一遍样例 1 2 是过了,但后面的点估计都红一片黑一片的。
希望数据能水一些。 
ccf 大慈大悲。 

*****
*/ 

/*
来给大家整个活。

浔阳江头夜送客,枫叶荻花秋瑟瑟,主人下马客在船,举酒欲饮无管弦,醉不成欢惨将别,别时茫茫江浸月。
忽闻水上琵琶声,主人忘归客不发,寻声暗问弹者谁,琵琶声停欲语迟,移船相近邀相见,添酒回灯重开宴,
千呼万唤始出来,犹抱琵琶半遮面,转轴拨弦三两声,未成曲调先有情,声声掩抑深深思,似诉平生不得志,
低眉信手续续弹,说尽心中无限事,轻拢慢捻抹复挑,初为《霓裳》后《六幺》,大弦嘈嘈如急语,小弦切切如私语,
嘈嘈切切错杂弹,大珠小珠落玉盘,间关莺语花底滑,流泉冷落冰下难,冰泉冷塞弦凝绝,凝绝不通声暂歇,

先默到这吧,考试快结束了,去检查一下,而且我后边快忘了( 
*/ 
#include <bits/stdc++.h>
#define mp make_pair

using namespace std;

const int ***** = 1e5 + 3;

int n, k;
int a[*****];
bool v[*****];
vector<int> p;

int main() {

    freopen("duel.in", "r", stdin);
    freopen("duel.out", "w", stdout);

    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> k;
        if (!v[k]) v[k] = 1, p.push_back(k);
        a[k]++;
    }
    //cout << a[1] << ' ' << a[2];
    sort(p.begin(), p.end());
    for (int i = 1; i < (int)p.size(); ++i) {
        if (a[p[i]] < a[p[i - 1]]) {
            a[p[i]] += (a[p[i - 1]] - a[p[i]]);
        }
    }
    cout << a[p[(int)p.size() - 1]];

    return 0;
}
// 14:30 - 15:20 
/*
感觉比密码锁简单。
样例都能过,希望这题不要挂。 

*****
*/
#include <bits/stdc++.h>
#define fi first
#define se second
#define db cout<<"AAA\n"
#define mp make_pair

using namespace std;

const int ***** = 1e5 + 3, ***** = *****;

int T, n, m, l, V, d[*****], v[*****], a[*****], p[*****], s[*****];
int k[*****];
vector<int> c[*****];

int main() {

    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);

    freopen("detect.in", "r", stdin);
    freopen("detect.out", "w", stdout);

    cin >> T;
    while (T--) {
        memset(s, 0, sizeof s);
        memset(k, 0, sizeof k);
        pair<double, double> t[*****];
        bool f = 0;
        int cnt0 = 0;
        cin >> n >> m >> l >> V;
        for (int i = 1; i <= n; ++i) {
            cin >> d[i] >> v[i] >> a[i];
            if (a[i]) f = 1;
            if (v[i] > V) {
                if (a[i] >= 0) { // 持续超速 
                    t[i].fi = d[i];
                    t[i].se = l;
                }
                else { // 超速一段再不超 
                    t[i].fi = d[i];
                    t[i].se = d[i] + (V * V - v[i] * v[i]) / 2.0 / a[i];
                }
            }
            else if (v[i] == V) {
                if (a[i] <= 0) { // 持续不超 
                    t[i].fi = -1;
                    t[i].se = -1;
                }
                else { // (] 超 
                    t[i].fi = d[i] + 0.1;
                    t[i].se = l;
                }
            }
            else {
                if (a[i] <= 0) { // 持续不超 
                    t[i].fi = -1;
                    t[i].se = -1;
                }
                else { // 不超一段后超 (] 
                    t[i].fi = d[i] + (V * V - v[i] * v[i]) / 2.0 / a[i] + 0.1;
                    t[i].se = l;
                    if (t[i].fi > l) {
                        t[i].fi = -1;
                        t[i].se = -1;
                    }
                }
            }
        }
        for (int i = 1; i <= m; ++i) {
            cin >> p[i];
        }
        if (!f) {
            for (int i = 1; i <= n; ++i) {
                if (d[i] <= p[m] && v[i] > V) cnt0++;
            }
            cout << cnt0 << ' ' << (!cnt0 ? m : m - 1) << '\n';
            continue;
        }
        int cnt1 = n;
        for (int i = 1; i <= n; ++i) {
            if (t[i].fi == t[i].se && t[i].fi == -1) {
                cnt1--;
                continue;
            }
            int dl = lower_bound(p + 1, p + 1 + n, t[i].fi) - p, dr = lower_bound(p + 1, p + 1 + n, t[i].se) - p;
            int lft = *(dl + p), rgh;
            int o = dr;
            //if (p[o] == p[i])
            if (p[o] > t[i].se) {
                if (p[o - 1] < t[i].se) {
                    if (p[o - 1] < t[i].fi) {
                        rgh = p[o];
                    }
                    else {
                        rgh = p[o - 1];
                        dr--;
                    }
                }
                else {
                    rgh = p[o];
                }
            }
            else if (p[o] == t[i].se) {
                if (t[i].fi == t[i].se) {
                    rgh = -1;
                    dr = -1;
                }
                else if (sqrt(v[i] * v[i] + 2 * a[i] * (p[o] - d[i])) > V) {
                    rgh = p[o];
                }
                else rgh = p[o - 1], dr--;
            }
            else rgh = p[o];
            if (lft > t[i].fi && rgh > t[i].se) cnt1--;
            //cout << t[i].fi << ' ' << t[i].se << ' ' << lft << ' ' << rgh << ' ' << dl << ' ' << dr << '\n';
            s[i] = dr - dl + 1;

            for (int j = dl; j <= dr; ++j) {
                c[j].push_back(i);
                k[i]++;
            }
        }
        int cnt2 = 0;
        /* */
        for (int i = 1; i <= m; ++i) {
            if (!k[i]) ++cnt2;//, cout << i << ' ';
            else {
                bool g = 0;
                for (auto j : c[i]) {
                    if (s[j] == 1) {
                        g = 1;
                        break;
                    }
                }
                if (g) {
                    continue;
                }
                else {
                    for (auto j : c[i]) {
                        s[j]--;
                    }
                    ++cnt2;
                    //cout << i << ' ';
                }
            }
        } 
        cout << cnt1 << ' ' << cnt2 << '\n';
        for (int i = 1; i <= n; ++i) c[i].clear();
    }

    return 0;
}
// 15:21 - 17:13
/*
第一眼感觉还行,但写到后边发现这玩意要处理区间啥的乱七八糟一坨, 
这种东西都不会,而且在前边的细节处理还写烂了,摆了。 

*****
*/
#include <bits/stdc++.h>

using namespace std;

const int ***** = 2e5 + 3;

int t, n, a[*****], ans;
bool v[*****];
int p[*****];

void dfs(int k, int w) { // 0 - r, 1 - b 
    if (k == n) {
        //for (int i = 1; i <= n; ++i) cout << v[i] << ' ';
        //cout << '\n';
        ans = max(w, ans);
        return;
    }
    int x = 0, y = 0, i = k + 1;
    int cnt1 = 0, cnt2 = 0;
    for (int j = i - 1; j >= 1 && cnt1 + cnt2 != 2; --j) {
        if (!v[j] && !cnt1) x = j, ++cnt1;
        if (v[j] && !cnt2) y = j, ++cnt2; 
    }
    v[i] = 0;
    dfs(k + 1, w + (a[x] == a[i]) * a[i]);
    v[i] = 1;
    dfs(k + 1, w + (a[y] == a[i]) * a[i]);
    v[i] = 0;
    return;
}

int main() {

    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);

    freopen("color.in", "r", stdin);
    freopen("color.out", "w", stdout);

    cin >> t;
    a[0] = -*****;
    while (t--) {
        memset(v, 0, sizeof v);
        memset(p, 0, sizeof p);
        ans = -*****;
        cin >> n;
        for (int i = 1; i <= n; ++i) {
            cin >> a[i];
            p[a[i]]++;
        }
        v[1] = 0;
        dfs(1, 0);
        if (p[a[1]] > 1) {
            memset(v, 0, sizeof v);
            v[1] = 1;
            dfs(1, 0);
        }
        cout << ans << '\n';
    }

    return 0;
}

// 17:17 - 没看 
/*
dp 罢这是,但我 dp 学得很烂,转移方程不会写啊,打了个爆搜,/kk

*****
*/
#include <bits/stdc++.h>

using namespace std;

const int ***** = 1e5 + 9;

int n, m, a[*****], c[*****], t, k, x, _, __, ___, ____;

int main() {

    freopen("arena.in", "r", stdin);
    freopen("arena.out", "w", stdout);

    cin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
    } 
    for (int i = 1; i <= m; ++i) {
        cin >> c[i];
    }
    k = ceil(logb(n));
    for (int i = 1; i <= k; ++i) {
        for (int j = 1; j <= (1 << (k - i)); ++i) {
            cin >> x;
        }
    }
    cin >> t;
    while (t--) {
        cin >> _ >> __ >> ___ >> ____;
        cout << "0\n";
    }

    return 0;
}
// 不会,根本没看时间
/*
不想看题,总司令。 
至少让我混个 2= 罢 /ll。 

*****
*/