2024 蓝桥杯省赛游记

Day -inf

看了眼去年的题,一个插头 dp 一个杜教筛,恐怖如斯

群里问了句发现 hkh mtr 也参加

Day1

完全没压力所以随便玩了。开场扫了一眼只有 8 道题,有个树上莫队?

T1 赛后看知乎好像能直接拿 excel 生成字符串形式的日期
T2 一开始没注意白棋一定有 13 个子,跑完了再看题才想到,提答的大忌都忘了
T3 枚举了组团训练的次数,然后 O(1) 算答案。赛后看知乎没有必要,做法还是挺多的
T4 不就是两个自动机上同步 bfs/dfs,这还能拿来当一道题(
T5 方差我可太熟了。不知道为什么以为二分复杂度不对。T6 计数没一眼秒所以先跳了。
T7 颜色种类 20,直接倍增就完了,很久没写还专门测了一下 lca 处
T8 出乎意料地简单,随便线段树维护一下贪心
回头看 T5 复杂度很对啊,写完可能还剩 2h

最后做 T6。一开始想手动容斥成二元组,但想不清楚容斥,最后的做法在下面。写了个拍,调了 1h

最后读题看代码发现倍增的 lca 处写的一坨,不知道前面测了个啥,紧急修了一下

等公交的时候被晒傻了,应该骑个电单车回去

Day inf

终于出成绩了,没有翻车

不知道这些比赛为什么这么能拖,含金量和出分速度成正比是吧


LG10390 [蓝桥杯 2024 省 A] 因数计数

我的数数水平真是低到令人发指

从值而不是位置出发数四元组。O(nlnn) 枚举一个二元组,讨论有值相同的情况

恰好爆 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;
}
posted @   ft61  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示