2025-10-28 ZYZOJ aoao round 1 hetao1733837的record
比赛链接:比赛详情 - aoao round 1 - ZYZOJ
比赛背景:《四时小店》
巷子深处有一家不起眼的小店,没有招牌,只在门口挂着一串风铃。风铃有四片坠子,分别是嫩柳、清荷、霜叶与冰花。没人知道店主是谁,只传说,在这里能买到“恰好”的东西。
春·柳铃
三月,一个为毕业论文焦头烂额的青年路过,风铃上的柳叶轻轻作响。他鬼使神差地走进去,店里空无一人,只有一股雨后青草的香气。柜台上放着一小罐茶叶,标签上手写着“明前龙井”。他正需要提神,便放下钱带走了它。那晚,他泡开茶叶,清香满室,文思竟如泉涌,困扰他许久的章节一气呵成。他仿佛听到耳边有春风拂过柳条的温柔声响。
夏·荷风
七月,一个刚和好友大吵一架的女孩,满心委屈地晃到巷子里。暑气蒸得人烦躁,风铃上的荷花瓣却透着一丝清凉。她走进小店,发现一把团扇静静躺在窗边。扇面是素白的,只角落绣着一朵将开未开的粉荷。她拿起扇了扇,心中的火气竟莫名消散,想起的都是好友往日的好。她买下扇子,决定立刻去找好友和解。出门时,她感觉像有一阵清凉的荷风,吹散了盛夏的闷热。
秋·叶语
十月,一位中年园丁看着自己精心培育的菊花被一场突如其来的秋雨打残,满是失落。他踱进小店避雨。风铃上的枫叶红得正好。店里,一个素白瓷瓶里插着一枝金色的桂花,甜香幽幽。旁边有张纸条:“荣枯有时,静待来年。”他怔住了,看着那桂花,又想起自己那些根基尚在的花卉,忽然释然。他什么也没买,对着空店道了声谢,便推门走入渐歇的秋雨中,脚步沉稳了许多。
冬·冰晶
一月,一个北上的游子,担忧着家乡怕冷的母亲。风雪夜,他路过巷口,见小店竟亮着暖黄的灯。风铃上的冰花坠子映着灯光,像一颗星星。他走进去,看到一条灰白色的羊毛围巾,厚实而柔软。他立刻买下,寄回了家。母亲后来在电话里说,围巾暖和极了,而且不知怎的,总带着一点阳光的味道,让她整个冬天都不觉得难熬。四季流转,风铃依旧。有人说是魔法,有人说是心理作用。但每个从小店带走“恰好”的人,心里都仿佛被那个季节轻轻吻了一下,然后带着这份温柔,继续走入人生的下一程风雨与晴明。
A.spring
难度预估:黄
原题链接1:题目详情 - 春 - aoao round 1 - ZYZOJ
原题链接2:B - Reverse and Compare
原题链接3:AT_agc019_b [AGC019B] Reverse and Compare - 洛谷
没错,邪恶的aoao搬了原题!
分析
首先明确一点:字串是连续的,不一定连续的是子序列!!!概念上的错误在考场上往往是致命的。好,我们回归原题。以aoao的样例来解释:
输入:
woshinailong
输出:
64
如果我们直接求原串的子序列个数,那么公式就是:
我们又发现,对于所有回文串,都是要减去的,而每个字符本身都是回文串,而反转回文串的收益相同,故要减去原序列长度,那么
运行后发现又不对/(ㄒoㄒ)/~~
为什么呢?在原样例中,翻转"shinail"和翻转"oshinailo"所得结果一样。同理,翻转"na"和"inai","ailo"和"nailon"也是一样的。这启示我们统计重复出现的字符,假设某个字符出现了cnt次,那么我们会计算次,化简得
.OK,可以写代码啦!!!
正解
#include <bits/stdc++.h>
#define int long long
using namespace std;
string s;
int cnt[30];
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> s;int len = s.size();bool flag = 1;for (int i = 0; i < len; i++){cnt[s[i] - 'a']++;if (i != 0){if (s[i] != s[i - 1])flag = 0;}}if (flag){cout << 1;return 0;}int ans = len * (len + 1) / 2;ans -= len;for (int i = 0; i < 26; i++){if (cnt[i] == 0)continue;ans -= (cnt[i] * (cnt[i] - 1) / 2);}cout << ans + 1;
}
B.summer
难度:绿
原题链接1:题目详情 - 夏 - aoao round 1 - ZYZOJ
原题链接2:P9179 [COCI 2022/2023 #5] Logaritam - 洛谷
分析
关键性质:每个数的因数的因数也是原数的因数。
比较拗口,举个例子:12=1*12=2*6=3*4,其中6=2*3,4=2*2,而2和3都是12的因数。
而对于每一对因数,我们只需修改一个即可达到目的。
那么,为了使操作次数最少,我们只需要求出原数的最大质因数并进行容斥即可。
即:我们要修改x最大质因数(记为GCD)的所有倍数,x的所有倍数,然后减去1(x本身不用修改),再减去x与GCD的最小公倍数的倍数(x的倍数)即可。
正解
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, q;
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> q;while (q--){int x;cin >> x;if (x == 1){cout << -1 << '\n';continue;}int maxn = 0;int xx = x;for (int i = 2; i <= sqrt(x); i++){while (x % i == 0){maxn = max(maxn, i);x /= i;}}if (x != 1){maxn = max(maxn, x);}cout << max(0ll, (n / maxn - 1)) << '\n';}
}
由于写了这个max(0ll, (n / maxn - 1)),而n / maxn - 1始终非负,被机房大佬AeeE5x嘲笑码风像DeepSeek了/(ㄒoㄒ)/~~
C.autumn
难度:蓝~紫
原题链接1:题目详情 - 秋 - aoao round 1 - ZYZOJ
原题链接2:P2748 [USACO16OPEN] Landscaping P - 洛谷
邪恶的aoao卡掉了反悔贪心/(ㄒoㄒ)/~~
但是作为蒟蒻的我好像 学会反悔贪心就很不错了,而正解要求Slope Trick还是太深奥了。
所以,我们只研究反悔贪心。(Luogu可以过,但是ZYZOJ上只有50)。
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 100005;
priority_queue<int> q1, q2;
int n, x, y, z, ans;
int a[N], b[N];
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> x >> y >> z;for(int i = 1; i <= n; i++){cin >> a[i] >> b[i];if(a[i] < b[i]){for(int j = 1; j <= b[i] - a[i]; j++){if(!q1.size() || i * z - q1.top() >= x){ans += x;q2.push(i * z + x);}else{int v = q1.top();q1.pop();ans += i * z - v;q2.push(i * z * 2 - v);}}}else{for(int j = 1; j <= a[i] - b[i]; j++){if(!q2.size() || i * z - q2.top() >= y){ans += y;q1.push(i * z + y);}else{int v = q2.top();q2.pop();ans += i * z - v;q1.push(i * z * 2 - v);}}}}cout << ans;
}
有兴趣得朋友也可以做它的弱化版:P3049 [USACO12MAR] Landscaping S - 洛谷
D.winter
难度:紫~黑
原题链接1:题目详情 - 冬 - aoao round 1 - ZYZOJ
原题链接2:P9339 [JOIST 2023] 曲奇 / Cookies - 洛谷
大家猜我会吗?显然是0。以后再补吧……
