建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在toot缝隙之间得到$C_{9}^{4}$ 10个$toot$ 放进$5$间房屋,每个房屋里可以没有$toot$,方案数 思考:插板法使用条件必须是每组至少有1个,那么我们事先在每个房屋中放一个$toot$变成$15$个$toot$放进$5$个房屋,可以插板法,与上一题类似$C_{14}^{4}$ 那…
star way to heaven 题解 大致尝试了一下并查集,记忆化搜索,最小生成树 最小生成树是正解,跑最小生成树然后找到最大的值 欧几里德距离最小生成树学习 prim楞跑 至于为什么跑最小生成树不是跑最大生成树,你跑最大生成树连的边可能会^%$&$%!# 感性理解手膜吧,我理解但说不清楚,稍微手膜就出来了,你可以举出一万种反例 代码实现细节比较多,技巧也比较多 注意边界处理,我们可以以一个边界为0,另一个边界权值为m,比较上下边界时不用再比较横坐标 #include<bits/std…
矩阵游戏 考试时思路一度和正解一样,考试到最后还是打了80分思路,结果80分打炸了只得了40分暴力分 题解 算出来第一列的总值,每次通过加每两列之间的差值得出下一列的总值 算第一列我们只需要让当前点*行增倍的数量就行了 for(ll i=1;i<=n;i++){ nowlie=(nowlie+elephant(i,1)*hang[i])%mod; sum=(sum+hang[i]); } 算其他列 nowlie=(nowlie+sum)%mod; 可能这一列会加倍只需乘上就行了 ans=(ans…
日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对于多次考试来说,身体原因状态原因都是一时的理由,而肉眼可见的下滑不能用这些去掩饰. 今天还有考试,让我看看我是不是到此为止. T1建设城市: 一眼组合数学插板法+容斥,抓起笔写了写式子,插板法没有难度,容斥就emmmm. 没写过容斥的题…也没有自己推过式子… 再看一眼数据范围看看能拿多少部分分,想到…
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍然认为不可实现 0分 所以T1是什么样的难题呢 即使暴力也有60分,但我楞没想出来暴力怎么打 然后我就挂掉了 t2又是什么样难题 大多数人秒切一个小时切两道, 但这次考试给了我很大启迪,也正是这次考试我才开始使劲刚T1 其实大多数T1都是比较简单的,并没有想象中那么难,这次考试对我来说意义很大 (就…
鉴于T3的惨烈程度,我决定先来颓篇题解. T1 建设城市(city) 挡板法+容斥 m个建设队分成n组,每组必须有一个,先不考虑上限,共有 C(m-1,n-1)种方案. 有i个组是超过k个的,容斥掉 C(n,i)*C(m-i*k-1,n-1) 相当于把i×k个建设队拿出来,把剩下的m-i*k个建设队分成n组并且保证每个组都至少有一个且不考虑上界,再把这i个k放进n个分组里,就至少有i个组是大于k的. #include<iostream> #include<cstring> #inc…
---恢复内容开始--- 序列 刚调出来样例就A了,假装是水题. 因为是乱序,我们要求出来每两项之间最小公比,而不是直接比 求出来每两项之间最小公比,然后扫一遍就完了.(还要注意重复情况) 那么问题就转化成了怎么求最小公比. 完了 以下是本人丑陋的代码 #include<bits/stdc++.h> #define ll long long #define A 100000 using namespace std; ll n,a[10*A],tot=0,maxlen[10*A],nowlen=…
magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G}^{i}  \%phi(p)}\%p$ 根据欧拉函数是积性的得出$phi(54184622)=phi(2)*phi(27092311)$ 然后$phi(27092311)=27092310$  $phi(2)=1$所以$phi(54184622)=27092310$ 于是我们现在要求的就是$N^{\su…
折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #include<bits/stdc++.h> using namespace std; #define ll long long #define A 3100000 ll cj[A],questions[A]; ll len,l,r,n,QAQ; int main(){ scanf("%lld%lld",&len,&QAQ); l=0,r…
待补 引子 题解 大模拟,注意细节 代码1 #include<bits/stdc++.h> using namespace std; int n,m;char a[1005][1005];bool vst[1005][1005]; void solve(int na,int nb) { int i=na,j=nb,now=0; while(1){ j++;if(a[na][j]=='+')break; } while(1){ i++;if(a[i][nb]=='+')break; } for(…