[考试反思]0131省选模拟测14:遗失

100+0+40=140.rk3

凑合?

然而T2调试语句没删丢了20。(代码开头读入之前一个赫然的return 0)

T2大概转化了题意,然后是杨氏矩阵的裸体了。然而我不会杨氏矩阵。

尽力了。能打的都打了。还不错吧。。。

中午就改完了T2,然后对着T3看了差不多一下午。。。

感觉题解有锅啊。。。并没有人会解释。。。于是弃掉了

T1:开车

大意:图,第i条边权值为$2^i$。求每条边都经过一次的最短回路。$n \le 100000, m \le 500000$

先强制每条边都走一次,于是每个点度数已知。只要让所有点度数都为偶数就形成了回路。

由于边权的特殊性,前$i-1$条边加起来也没有第i条边大,所以一定是用最小生成树上的边来凑度数。

跑最小生成树然后做个类似贪心的东西就没了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define mod 1000000007
 4 #define S 888888
 5 int fir[S],l[S],to[S],v[S],d[S],n,m,f[S],V=1,ans,ec;
 6 void add(int&a,int b){a+=b;if(a>=mod)a-=mod;}
 7 int find(int p){return f[p]==p?p:f[p]=find(f[p]);}
 8 void link(int a,int b,int w){l[++ec]=fir[a];fir[a]=ec;to[ec]=b;v[ec]=w;}
 9 int dfs(int p,int fa,int x=0){
10     for(int i=fir[p];i;i=l[i])if(to[i]!=fa)x=dfs(to[i],p),add(ans,x*v[i]),d[p]+=x;
11     return d[p]&1;
12 }
13 int main(){
14     scanf("%d%d",&n,&m);
15     for(int i=1;i<=n;++i)f[i]=i;
16     for(int i=1,a,b;i<=m;++i){
17         add(V,V);add(ans,V);
18         scanf("%d%d",&a,&b);d[a]++;d[b]++;
19         if(find(a)!=find(b))f[f[a]]=f[b],link(a,b,V),link(b,a,V);
20     }dfs(1,0);printf("%d\n",ans);
21 }

T2:上分

大意:若要解锁(i,j)必须解锁(i,j-1),(i-1,j)。(x,y)在x<y时无需解锁。给定两点(a,b),(c,d)。求解锁这两个点在保证总解锁点数最小的情况下解锁顺序方案数。

$b \le a,d \le c, \ a,c\le 1000000$保证最小总解锁点数小于等于1000000。

斜着的坐标系看着难受,转过来。把(i,j)变成(i-j+1,j)。这样限制就变成了必须先解锁左边和上边的元素。

然后就是杨氏矩阵裸题了。

杨氏矩阵是指一类:如果这个点有元素,那么右方和下方要么有元素,要么比这个点大。这样的矩阵就是杨氏矩阵。

引入钩子引理:$P=\frac{n!}{\prod h_{i,j}}$。P是指在确定杨氏矩阵的形状的情况下,在每个有元素的位置上填$1$到$n$使之满足杨氏矩阵性质的方案数。

$h_{i,j}$表示$(i,j)$这个点的钩子长:右方和下方(不含)的元素个数和+1。

这道题杨氏矩阵的形状就是一个矩形,或两个相交的左上角重叠的矩形。

预处理阶乘的前缀积,用那种二位前缀和一样的思路差分一下即可。

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 #define mod 1000000007
 5 int fac[1234567],a,b,c,d,ffac[1234567],iinv[1234567];
 6 int qp(int b,int t,int a=1){for(;t;t>>=1,b=1ll*b*b%mod)if(t&1)a=1ll*a*b%mod;return a;}
 7 int cal(int a,int b){return a*b?1ll*ffac[a+b-1]*iinv[a-1]%mod*iinv[b-1]%mod:1;}
 8 int ical(int a,int b){return a*b?1ll*iinv[a+b-1]*ffac[a-1]%mod*ffac[b-1]%mod:1;}
 9 int cal(int a,int b,int c,int d){return 1ll*ical(a,b-d)*ical(d,c-a)%mod*ical(b,c)%mod*ical(b-d,c-a)%mod*cal(c-a,b)%mod*cal(c,b-d)%mod;}
10 int main(){fac[0]=ffac[0]=iinv[0]=1;//freopen("1.in","r",stdin);
11     for(int i=1;i<=1000000;++i)fac[i]=fac[i-1]*1ll*i%mod,ffac[i]=ffac[i-1]*1ll*fac[i]%mod,iinv[i]=qp(ffac[i],mod-2);
12     int t,A,B,C,D;scanf("%d",&t);
13     while(t-->0){
14         scanf("%d%d%d%d",&A,&B,&C,&D);
15         A-=B-1;C-=D-1;
16         if(A>C)swap(A,C),swap(B,D);
17         if(B<=D)printf("%lld\n",1ll*fac[C*D]*ical(C,D)%mod);
18         else printf("%lld\n",1ll*fac[A*B+C*D-A*D]*cal(A,B,C,D)%mod);
19     }
20 }

T3:隔膜

大意:博弈,轮流操作n个有价值硬币,最开始第奇数个正面朝上其他反面。第$i$次操作可以在第$i,i+1$两个硬币中选一个翻面或者啥也不干。奇数次操作由先手方执行。

先手方得分是最后所有正面朝上的硬币价值和。求$n-1$次操作后最优决策下先手方得分。$m$次修改,每次修改会降低一个硬币的权值,保证时刻为正。每次修改后求解。

$n,m \le 200000$

暴力是一个比较经典的博弈论的倒着dp的思路。设dp[i][0/1]表示第i次操作前硬币i正反面朝上时,两人后续采取最优决策时先手方的得分。

暴力就可以写了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,a[222222];long long dp[2][222222];
 4 int main(){
 5     scanf("%d",&n);
 6     for(int i=1;i<=n;++i)scanf("%d",&a[i]);
 7     dp[1][n]=a[n];
 8     for(int i=n-1;i;--i)
 9         if(i&1)dp[1][i]=a[i]+dp[1][i+1],dp[0][i]=max(a[i]+dp[0][i+1],dp[1][i+1]);
10         else dp[0][i]=dp[0][i+1],dp[1][i]=min(dp[1][i+1],dp[0][i+1]+a[i]);
11     printf("%lld\n",dp[1][1]);
12     scanf("%d",&m);
13     while(m-->0){int p,d;
14         scanf("%d%d",&p,&d);a[p]-=d;
15         dp[1][n]=a[n];
16         for(int i=min(n-1,p);i;--i)
17             if(i&1)dp[1][i]=a[i]+dp[1][i+1],dp[0][i]=max(a[i]+dp[0][i+1],dp[1][i+1]);
18             else dp[0][i]=dp[0][i+1],dp[1][i]=min(dp[1][i+1],dp[0][i+1]+a[i]);
19         printf("%lld\n",dp[1][1]);
20     }
21 }

正解的话说的很有道理,但是不会证明。

说是在的代码不会很难写,应该说很简单。但是不会证写着就很没意思,所以先鸽了。

原文地址:https://www.cnblogs.com/hzoi-DeepinC/p/12246901.html

时间: 2024-11-13 06:42:22

[考试反思]0131省选模拟测14:遗失的相关文章

[考试反思]0113省选模拟6:过载

真累啊...离上次放假也挺久,离下次放假也挺久,离上次放出去玩也挺久,离下次放出去玩还不知道有多久... 好累啊...大脑基本成天在挂机了.什么也不想干了... 持续状态不佳.但是今天运气好,所以考试排名看起来还可以. T1没认真读题也没看数据范围,以为是送分题,17分钟写完交了...然后我就把分送出去了 像个弱智一样...但是现在的精神状态的确不太能支持好好做题 幸亏T2是个比较简单的SAM+dp,思维量不大,脑子宕机的时候也能写一写. (归功于当时给大家讲课时稍微有一点理解,要是其它的板子我

[考试反思]0114省选模拟7:迷离

这次考得相对不错,但是没什么水准. 只不过记得T1这道原题而已.虽说我忘了怎么做,而且数据范围不一样...差不多是从头想的. 但是并没有AC,像个弱智一样,有两个细节写的完全不对还有80分运气也是真好. 其实挂了不止两个细节...以为是原题于是上来就写20分钟写完,然后过一会出一个锅... 然后看T2,感觉$O(nk^2)$也许差不多?常数很大...但也不会别的.挺好想但是不是很好写. 于是乎强烈谴责cbx没素质暴力水题考后还不改正解的无脸行径 于是就开始写,写了一个半小时. 看T3,绝对大神题

[考试反思]0130省选模拟13:悔恨

0+30+20=50.rk8 关键在于: T1写错个变量名挂了100分 kxkxkxkx(激动的语无伦次) 考试过程?上来看T1,一个比较裸的基环树dp,断开环上一条边之后大概就是一个稍加改动的最大独立集. 思路不难想,细节倒是有一点,考场上调啊调啊过了样例又手模了各种数据都过了两个半小时之后很开心就扔了. 然后看T2/3啥都不会,写了俩随机化就走了. 然而T3随机化+贪心是可以AC的.正确性不知道...没写... 最后还有5分钟回T1,突然发现T1可以不是基环树而是基环树森林??? 啊修锅修锅

[考试反思]0117省选模拟10:争夺

T3出了一点锅,于是按IOI赛制打的. 可能也是这辈子唯一一次好好打的IOI赛制了. 提答,又沉里面了,进去就出不来.莫名的虚荣让我根本没有回头看传统题. 于是的确在T3的80%时间里一直单题rk1,然而其实很慌,剩下两道题又怎样? 运气好,T1特别水,T2数据水,T3用奇技淫巧多拿7分于是并列rk1了. 数组没清空丢了1分... 状态差的不行,一下午一道题都没改出来...咕到第二天也没改出来 于是在第二天考试的时候写完三个暴力之后终于把T2A了... 然后第二天考试就炸了,没什么好说的 T1:

[考试反思]0208省选模拟21:限制

估分35+14+5=54. 一个喜闻乐见的蓝色的零. 撞了$c++11$的关键字$ref$.长见识. 关键是本机因为太慢所以开不开$c++11$,一开就编译好久,所以一直没有发现... 通读三道题,没看懂题.再读一遍,啥都不会.然后开始想,然而啥都没有想出来. 上来先看的T2觉得比较简单(?).然后就开始写.然而少考虑了不少情况,因为数据的特殊性拿到了一些部分分 然后继续想剩下俩题的正解,再然后就没多少时间了(?). 这时候发现T1是一个非常经典的大小点问题,想的非常麻烦. 最后剩半个多小时的时

[考试反思]0220省选模拟27:怪异

怪异的一场考试.考的有点懵 $T1$正解是模拟,人人都能切,然而也没有多少人敢笃定这就是正解吧,常数和精度上下卡着,看运气的题了. $T2$想到了第二档分其实离正解就不远了但是时间不够没往下想.回$T1$卡常去了. $T3$不给状压分,于是猜到一条结论之后并不敢往下想... 然而最后$T1$也没有卡过,考后也在这破玩意上浪费了不少时间... 而且$T3$数据特别谁水暴力可以过,然而因为我不会决策点单调,所以学了学知识点,并没有用暴力水过... T1:飞行棋 大意:长度为$n$的序列,$m$人.每

[考试反思]0323省选模拟53:常数

服气了.$T1$被卡常了. 出题人你卡常就卡常吧,但是能不能不要绑着子任务卡啊. 你绑子任务就绑子任务但是你好歹给被卡常的留一档分别直接卡成和$n^2$一样啊. 你卡就卡了能不能直接把最后一个子任务设成$63pts$啊. 这题被你卡常一下正常考试一半多的分数就没了. 算了出题人向来不考虑答题的感受,自己没被卡于是就卡别人呗. 本来大概是$120pts$大概也能混个前三,真有意思. 然后$T3std$还是巨型毒瘤$whzzt$写的,大力卡常,考后浪费了不少时间... 毒瘤,真毒瘤 T1:数(num

[考试反思]0410省选模拟67:迷惑

现在想想,先做$T3$真乃人间迷惑行为. 部分分不多的一场考试,$T1$部分分最多结果没花时间光荣爆零,结果正解真的就是一个暴力+大力分类讨论 $T2$也比较可想,然而看着$75pts$的子任务心中有几分慌张,苟了个暴力跑路了. 结果一个弱智$T3$的$10pts$部分分$O(n^8)$暴写了$2.8k$.从这代码长度看是不是$10pts$您施舍的有点少啊. 其余部分分一点用没有,不知道咋想的. T1:链 大意:维护操作:加边,询问有几个点满足:删掉之后图中剩下的都是若干链.$n,m \le 2

[考试反思]1219省选模拟3: 释怀

有些东西渐渐就远去了...不必挂念. 只有时间才拥有如此力量.我们能做的,唯有释怀. 这次的题格外顺手,大概是我的强项了. 但是考得还是不够好吧...感觉可以更高的 今天迎来了学了OI一年多比较重要的一个成就:(虽说是在考后) AC1000道题!还是挺不容易的. 第1000道题是今天的T3.大部分是自己思考的,题也不是很简单,挺好的. 挺过了联赛,现在想要等到下一次整百,可能就要到3月份了. 我还能在OI多久呢? 回到这场考试. T1的数据范围只有10000,让我想起了ALO那道题50000数据