☰
2026-10-06 hetao1733837 的刷题记录
2026/10/9 15:39:03 网站建设 项目流程

LGP2986 [USACO10MAR] Great Cow Gathering G

原题链接:[USACO10MAR] Great Cow Gathering G

分析

然而,这是好写的,我们先做一遍……其实和 P3478 差不多,只是这次加了一个系数c i c_ici​而已。做完了……
我要自己写代码✊
我是飞屋😭

正解

#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=100005;intn,c[N];vector<pair<int,int>>e[N];intsum[N];intdp[N];intsz[N];inttot;voiddfs1(intu,intfa){sum[u]=0;sz[u]=c[u];for(autotmp:e[u]){if(tmp.first==fa)continue;dfs1(tmp.first,u);sz[u]+=sz[tmp.first];sum[u]+=sum[tmp.first]+sz[tmp.first]*tmp.second;}}intans;voiddfs2(intu,intfa){ans=min(ans,dp[u]);for(autotmp:e[u]){if(tmp.first==fa)continue;dp[tmp.first]=dp[u]-sz[tmp.first]*tmp.second+(tot-sz[tmp.first])*tmp.second;dfs2(tmp.first,u);}}signedmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;for(inti=1;i<=n;i++){cin>>c[i];tot+=c[i];}for(inti=1,a,b,l;i<n;i++){cin>>a>>b>>l;e[a].push_back({b,l});e[b].push_back({a,l});}dfs1(1,0);dp[1]=sum[1];ans=dp[1];dfs2(1,0);cout<<ans;}

LGP3047 [USACO12FEB] Nearby Cows G

原题链接:[USACO12FEB] Nearby Cows G

分析

睡醒了……
开一个20 2020的数组,每次更新,然后……随便写一个线段树怎么样?完美……
显然,这个并不是特别对……其实差不错了。但是,我不是很会写代码。
我们看一眼题解吧……
我不建议你这么干……我们找个A I AIAI辅助一下。

正解

#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=100005,K=25;intn,k;intc[N];vector<int>e[N];intdp[N][K];intans[N];voiddfs1(intu,intfa){dp[u][0]=c[u];for(autov:e[u]){if(v==fa)continue;dfs1(v,u);for(intj=1;j<=k;j++){dp[u][j]+=dp[v][j-1];}}}voiddfs2(intu,intfa){intsum=0;for(intj=0;j<=k;j++)sum+=dp[u][j];ans[u]=sum;for(autov:e[u]){if(v==fa)continue;for(intj=k;j>=1;j--){dp[v][j]+=dp[u][j-1];if(j>=2)dp[v][j]-=dp[v][j-2];}dfs2(v,u);}}signedmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>k;for(inti=1,u,v;i<n;i++){cin>>u>>v;e[u].push_back(v);e[v].push_back(u);}for(inti=1;i<=n;i++){cin>>c[i];}dfs1(1,0);dfs2(1,0);for(inti=1;i<=n;i++){cout<<ans[i]<<'\n';}return0;}

LGP17242 [IOI 2026] 方块游戏 / Tiling Game

原题链接:[IOI 2026] 方块游戏 / Tiling Game

分析

算是最新考情?从某些角度而言,C C F CCFCCF出题也是为了让高水平选手熟悉I O I IOIIOI,也是国际接轨吧……当然了,我这种蒟蒻如果能吃上尾流,那也是起飞了😁
不过现在乱搞肯定是飞不起来捏……
那就分讨呗……估计情况不是特别多。
如果你学过围棋的话,那么这道题似乎是比较好想的,有一个口诀就是:“金角银边草肚皮。”这个原指棋盘的四角只需要封住两边即可成活,边需要封三方,中间需要封四个。
虽然我也不知道为什么想到这个了。
就是说,如果这个白色是一个,如果只左上角,我们将其放在整个平面尽可能右下角的位置,右上角对应左下角……以此类推……
如果说白色是两个,那么,我们尽可能往四条边的位置上去放。如果有3 33个以上是白的,那么,往整个平面中间放是优的……我觉得这个贪心有一定的前途。后面的分类是不完全必要的,我们只保留第一次思考就可以了。
哇哦,这是不错的题。

正解

#include<bits/stdc++.h>usingnamespacestd;intn,m;intup,down;intlu,ru;intld,rd;intl,r;voidinit(intN,intM){n=N;m=M;up=0;down=n-1;lu=ld=0;ru=rd=m-1;l=r=-1;}std::pair<int,int>receive_block(intTL,intTR,intBL,intBR){if(up==down){if(l==-1){l=max(lu,ld);r=min(ru,rd);}std::pair<int,int>ans;if(!TL||!BL){ans={down<<1,r<<1};r--;}else{ans={down<<1,l<<1};l++;}returnans;}if(!TL){std::pair<int,int>ans={down<<1,rd<<1};rd--;if(rd<ld){down--;ld=0;rd=m-1;}returnans;}if(!TR){std::pair<int,int>ans={down<<1,ld<<1};ld++;if(rd<ld){down--;ld=0;rd=m-1;}returnans;}if(!BL){std::pair<int,int>ans={up<<1,ru<<1};ru--;if(ru<lu){up++;lu=0;ru=m-1;}returnans;}std::pair<int,int>ans={up<<1,lu<<1};lu++;if(ru<lu){up++;lu=0;ru=m-1;}returnans;}

LGP17387 [PacNW 2025] Pair-Linked Mokepon

原题链接:[PacNW 2025] Pair-Linked Mokepon

分析

天啊,昨天晚上和两位省队选手交流了一下,都好强,我也要变强😭
fqh是不是受到这个的启发呢?但是,他出去年夏天结营测的时候真的有这个吗?


有点难啊,之后再研究吧。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询