2024 蓝桥杯省赛游记
Day -inf
看了眼去年的题,一个插头 dp 一个杜教筛,恐怖如斯
群里问了句发现 hkh mtr 也参加
Day1
完全没压力所以随便玩了。开场扫了一眼只有 8 道题,有个树上莫队?
T1 赛后看知乎好像能直接拿 excel 生成字符串形式的日期
T2 一开始没注意白棋一定有 13 个子,跑完了再看题才想到,提答的大忌都忘了
T3 枚举了组团训练的次数,然后
T4 不就是两个自动机上同步 bfs/dfs,这还能拿来当一道题(
T5 方差我可太熟了。不知道为什么以为二分复杂度不对。T6 计数没一眼秒所以先跳了。
T7 颜色种类
T8 出乎意料地简单,随便线段树维护一下贪心
回头看 T5 复杂度很对啊,写完可能还剩 2h
最后做 T6。一开始想手动容斥成二元组,但想不清楚容斥,最后的做法在下面。写了个拍,调了 1h
最后读题看代码发现倍增的 lca 处写的一坨,不知道前面测了个啥,紧急修了一下
等公交的时候被晒傻了,应该骑个电单车回去
Day inf
终于出成绩了,没有翻车
不知道这些比赛为什么这么能拖,含金量和出分速度成正比是吧
LG10390 [蓝桥杯 2024 省 A] 因数计数
我的数数水平真是低到令人发指
从值而不是位置出发数四元组。
恰好爆 uLL
,需要 __int128
code
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std; using namespace __gnu_pbds; using namespace __gnu_cxx;
#define For(i,x,y,...) for(int i=x,##__VA_ARGS__;i<=(y);++i)
#define rFor(i,x,y,...) for(int i=x,##__VA_ARGS__;i>=(y);--i)
#define Rep(i,x,y,...) for(int i=x,##__VA_ARGS__;i<(y);++i)
#define pb emplace_back
#define sz(a) int((a).size())
#define all(a) begin(a),end(a)
#define fi first
#define se second
typedef long long LL; typedef vector<int> Vi; typedef pair<int,int> Pii;
auto ckmax=[](auto &x,auto y) { return x<y ? x=y,true : false; };
auto ckmin=[](auto &x,auto y) { return y<x ? x=y,true : false; };
sfmt19937 mt(chrono::steady_clock::now().time_since_epoch().count());
int rnd(int l,int r) { return uniform_int_distribution<>(l,r)(mt); }
template<typename T=int>T read() { T x; cin>>x; return x; }
const int mod = 998244353;
struct mint {
int x; mint(int x=0):x(x<0?x+mod:x<mod?x:x-mod){}
mint(LL y) { y%=mod, x=y<0?y+mod:y; }
mint& operator += (const mint &y) { x=x+y.x<mod?x+y.x:x+y.x-mod; return *this; }
mint& operator -= (const mint &y) { x=x<y.x?x-y.x+mod:x-y.x; return *this; }
mint& operator *= (const mint &y) { x=1ll*x*y.x%mod; return *this; }
friend mint operator + (mint x,const mint &y) { return x+=y; }
friend mint operator - (mint x,const mint &y) { return x-=y; }
friend mint operator * (mint x,const mint &y) { return x*=y; }
}; mint Pow(mint x,LL y=mod-2) { mint z(1);for(;y;y>>=1,x*=x)if(y&1)z*=x;return z; }
typedef __int128 lint;
ostream& operator << (ostream& io,lint x) {
if(!x)io<<'0';
else{static char s[40];int l=0;
for(;x;x/=10)s[l++]=x%10+'0';while(l)io<<s[--l];}
return io;
}
const int N = 1e5+5, X = 1e5;
int n;
lint tot1,tot2,ans,a[N],f[N],g[N];
lint A(lint x) { return x * (x-1); }
signed main() {
#ifdef FT
freopen("in","r",stdin); freopen("out","w",stdout);
#endif
ios::sync_with_stdio(0);cin.tie(0);
// n = 1e5; For(i,1,n) ++a[1];
cin>>n; For(i,1,n) ++a[read()];
For(i,1,X) for(int j = i+i; j <= X; j += i) f[i] += a[j], g[j] += a[i];
For(i,1,X) tot1 += a[i] * f[i], tot2 += A(a[i]);
For(i,1,X) if( a[i] ) {
ans += A(a[i]) * A(a[i]-2 + f[i]); // (i,i,*,*)
ans += A(a[i]) * (tot1-a[i]*f[i]-2*g[i] + tot2-A(a[i])); // (i,*!=i,i,*)
ans += A(a[i]) * f[i] * g[i]; // (i,*!=i,*!=i,i)
for(int j = i+i; j <= X; j += i) if( a[j] ) // (i,*!=i,j,*!=i)
ans += a[i] * a[j] * (tot1 - a[i]*(f[i]+g[i]) - (f[j]+g[j]) + a[i]
+ tot2 - A(a[i]) - A(a[j]) + A(a[j]-1));
// cerr<<i<<": "<<ans<<'\n';
}
cout<<ans;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构