排序 内存限制:128 MiB 时间限制:1000 ms 标准输入输出     题目描述 输入格式 数据范围与提示 对于30%的数据,1<=N<=4: 对于全部的数据,1<=N<=12. 一群数论题中出了一个搜索. 甚至我考试时一点也不会. 自己算复杂度比较大然后交上去只跑了90ms. 这也太 不多说了. 引理1 当前可以将原数列变成排序的操作,其每一种其他排列都可以将原序列变成排序. 证明 不太好证,举几个例子 例如 3 4 2 1这个序列可以经过操作1 操作2 变成 1 2 3…
折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #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…
大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容斥 于是我得到$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{j\times(k-1)}^{k-1} \times w[j]$ 但还是不对 现在思考第一个式子为什么不对 我们枚举矩阵选数 1 2 3 1 2 3 1 2 3 这样我们C的话概率会很鬼$\frac {4}{…
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍然认为不可实现 0分 所以T1是什么样的难题呢 即使暴力也有60分,但我楞没想出来暴力怎么打 然后我就挂掉了 t2又是什么样难题 大多数人秒切一个小时切两道, 但这次考试给了我很大启迪,也正是这次考试我才开始使劲刚T1 其实大多数T1都是比较简单的,并没有想象中那么难,这次考试对我来说意义很大 (就…
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…
star way to heaven 题解 大致尝试了一下并查集,记忆化搜索,最小生成树 最小生成树是正解,跑最小生成树然后找到最大的值 欧几里德距离最小生成树学习 prim楞跑 至于为什么跑最小生成树不是跑最大生成树,你跑最大生成树连的边可能会^%$&$%!# 感性理解手膜吧,我理解但说不清楚,稍微手膜就出来了,你可以举出一万种反例 代码实现细节比较多,技巧也比较多 注意边界处理,我们可以以一个边界为0,另一个边界权值为m,比较上下边界时不用再比较横坐标 #include<bits/std…
待补 引子 题解 大模拟,注意细节 代码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(…
164分 rank11/64 这次考的不算太差,但是并没有多大的可能性反超(只比一小部分人高十几分而已),时间分配还是不均,T2两个半小时,T1半个小时,T3-额十几分钟吧 然额付出总是与回报成反比的,T1切了,T2超时60分,T3拿到了4分的好成绩,但某位不愿透露姓名的王鹤松说,他花了将近俩小时在T1上,20分钟T2,结果T1没有切掉,T2 比我高十分(QWQ) 这场考试下来发现自己还是有点儿紧张,中间去了好几次WC 对于这场考试,遗憾的是时间分配不均,没有拿到足够高的分数来给自己上保险,不过…
考试时打的类似$n^2$暴力,然后炸了只有10分 后来验证我的算法伪了. 题解 显然你有一种解法,假设你要在一个B点断开将R分别移向最左 最右,这样只用分别计算B点右面蓝色数量左面蓝色数量就得到了一个ans 这个题有一个很不显然的结论,假设你要将R移向两边时,序列唯一确定时,设pos=(蓝色数量+1)/2,在pos点将R移向左面,右面花费最小(单调性) 因为这个序列是循环的所以我们只要枚举B点断开的位置就可以$n^2$求出最小的ans值 $n^2$显然过不了1000000 现在我们思考$n^2$…
金 辗转相减见祖宗 高精 #include<bits/stdc++.h> using namespace std; #define A 2000 #define P 1 #define N 10 #define ll long long ll n,T; char sjdfj[A]; struct bignum { ll n[A],l; bignum(){l=1,memset(n,0,sizeof(n));} void clear(){while(l>1&&!n[l-1])…