迫真小游戏 已经提交 已经通过 时间限制:2000ms 内存限制:256MB 73.98% 提交人数:196 通过人数:145 题目描述 H君喜欢在阳台晒太阳,闲暇之余他会玩一些塔防小游戏. H君玩的小游戏可以抽象成一棵 nn 个节点的有根树,树以 11 为根,每个点的深度定义为其到根的简单路径上的点数(根的深度为 11). H君有 nn 个干员,H君会按照某种顺序把她们部署到树的每一个节点上,使得每个节点上恰好有一个干员.由于游戏的机制,他们对每个节点 ii 都给出了个限制参数 a_ia i…
怎么说,看了推到之后真的不难,事实上确实也蛮友好(可能咱就是想不出多项式题目的做法???),除了用到了分治法法塔就比较毒瘤 花了一个晚上以及一个上午做这么一道题...(还是太菜了) Result1 分治法法塔NB ,CMX NB 推导分为两步走: Part1 第一步是求出游戏人数为 n 时,第一个人最后死亡的概率 \(f(n)\) 我们先写出 f 的公式: \[f_n=\sum_{i=0}^{n-1} f_{n-i} \binom{n-1}{i} p^i q^{n-i}\] 其中 i 为一轮下来…
好久没更博了,还是象征性地更一次. 依然延续了简要题解的风格. 题目链接 https://cometoj.com/contest/46 题解 A. 迫真字符串 记 \(s_i\) 表示数字 \(i\) 出现的次数,答案为 \(\min\{\lfloor\frac{s_1}{3}\rfloor, \lfloor\frac{s_4}{2}\rfloor, s_5\}\). #include<bits/stdc++.h> using namespace std; int main() { ios::…
Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/A?problem_id=1528 容易发现那玩意增长的飞快,只要模拟就可以了 //❤ ayaponzu* #include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib>…
Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最小值)和原数最低位的差. 令$S$为输入数字串,则答案为 $(\min_{i=1}^{n}S_i-S_n)%10$ . 时间复杂度 $O(n)$ . B.usiness -Problem designed by Winniechen- 这是一个很显然的动态规划问题. 令$g_{i,j}$表示第$i$…
Comet OJ - Contest #5 总有一天,我会拿掉给\(dyj\)的小裙子的. A 显然 \(ans = min(cnt_1/3,cnt_4/2,cnt5)\) B 我们可以感性理解一下,最大的满足条件的\(x\)不会太大 因为当\(x\)越来越大时\(f(x)\)的增长速度比\(x\)的增长速度慢得多 其实可以证明,最大的满足的\(x\)不会超过\(100\) 因为没有任何一个三位数的各位之和大于等于\(50\) 所以我们就直接预处理\(1-99\)所有的合法的 暴力枚举即可 其实…
Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{(p-l)(\frac{L+R}{2}-p)}{r-l}\),二次函数求最值即可. code C 枚举独立集点数即可.\(\sum_{i=0}^n\binom nip^{\binom i2}\). code D 树上的任意一个满足\(|S|\ge2\)的点集\(S\)均有一个唯一的中心,即直径的中点(…
原题:Comet OJ - Contest #4-B https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门 一开始就想着暴力打表,结果.. 前缀和是个很好的工具,本题可以用相邻前缀和之差得到结果. 例如:K=4: 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 #include <cstdio> using int64 = long long; int main() { int T; scanf(&quo…
Comet OJ - Contest #8 传送门 A.杀手皇后 签到. Code #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1005; vector <string> v; int n; string s; int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; for(int…
Comet OJ - Contest #13-C2 C2-佛御石之钵 -不碎的意志-」(困难版) 又是一道并查集.最近做过的并查集的题貌似蛮多的. 思路 首先考虑,每次处理矩形只考虑从0变成1的点.这样我们的复杂度就控制在了\(O(nm)\). 那么,我们考虑怎么维护每个点下一个0的位置.因为我们知道并查集是用来维护一些元素的相同关系.所以我们考虑使每个点的\(fa\)为这一行下一个0的位置.那么,当我们把一个点由0染成1时,将这个点和左边的点合并.我们就能保证当前这个点的\(fa\)就是下一个…
来源:Comet OJ - Contest #13 芝士相关: 复平面在信息学奥赛中的应用[雾 其实是道 sb 题??? 发现原式貌似十分可二项式定理,然后发现确实如此 我们把 \(a^i\) 替换成 \(\sqrt{a}^{2i}\) 然后发现原式求的就是 :\((\sqrt{a} +b)^n\) 展开后的偶数项 而这些偶数项有个性质,就是他们都不包含 \(\sqrt{a}\) ,所以我们可以把 \((\sqrt{a} +b)\) 转换到复平面上的点, \(b\) 做第一维, \(\sqrt…
来源:Comet OJ - Contest #13 一眼并查集,然后发现这题 tmd 要卡常数的说卧槽... 发现这里又要用并查集跳过访问点,又要用并查集维护联通块,于是开俩并查集分别维护就好了 一开始 XJB 搞了两个并查集建了个完全的连接方式,然后 xjb 写了堆合并,调了一会儿交上去喜见 TLE (自闭现场) 挺好的啊,然后改成动态开点并且访问点跳过的操作也优化了一下,终于爬过去了 ORZ 原 Code 代码挺好打&&极不清爽 //by Judge (zlw ak ioi) #inc…
Comet OJ Contest #13 D \(\displaystyle \sum_{i=0}^{\left\lfloor\frac{n}{2}\right\rfloor} a^{i} b^{n-2 i}\left(\begin{array}{c}{n} \\ {2 i}\end{array}\right)\) $ T \leq 10^4 , n , m , p \leq 10^{18} $ 注意,由于 $ p $ 不一定是质数,而且数据范围看起来很快速幂所有貌似只能快速幂. 这个式子可以化…
大意: 给定无向图, 点$i$点权$b_i$, 边$(x,y,z)$对序列贡献是把$A[b_x \oplus b_y]$加上$z$. 多组询问, 一共三种操作: 1. 修改点权. 2.修改边权. 3. 求序列$A$区间和. 图按度数分块. 对于轻点的贡献直接树状数组维护, 复杂度$O(17\sqrt{m})$ 每一条重边选度数较大的重点$x$建一棵$01trie$, 询问$[L,R]$区间和就等价于求异或$b[x]$后范围在$[L,R]$的和, 复杂度$O(17\sqrt{m})$. #incl…
题意 https://www.cometoj.com/contest/52/problem/C?problem_id=2416 思路 这里提供一种容斥的写法(?好像网上没看到这种写法) 题目要求编号为 \(i\) 的节点不能放在 \(p_i\) 位置,那我们不妨假设没有这些条件,然后再用二进制容斥的方法减去不满足条件的情况(即固定某些 \(i\) 在 \(p_i\) 上,这样会好考虑问题一点). 然后我们面临的问题就是,计算 \(A\)(二进制)这些数不能选,\(B\)(二进制)这些位置不能填的…
A:随便怎么暴力. #include<bits/stdc++.h> using namespace std; #define ll long long #define N 25 char getc(){char c=getchar();while (c!='.'&&c!='#') c=getchar();return c;} int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() { int x=0,f=1;char…
A:化成x-√n=y+z-√4yz的形式,则显然n是完全平方数时有无数组解,否则要求n=4yz,暴力枚举n的因数即可.注意判断根号下是否不小于0. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long…
传送门 太菜了连\(D\)都做不出来没有小裙子\(QAQ\) \(A\) 暴力把所有的数对都算出来,然后\(sort\)一下就行了 const int N=505; int a[N],st[N*N],top,n,k;ll res; int main(){ scanf("%d%d",&n,&k); fp(i,1,n)scanf("%d",&a[i]); fp(i,1,n)fp(j,i+1,n)st[++top]=a[i]+a[j]; sort(…
###题目链接### 题目大意:有 n 个正整数,每个正整数代表一个成语,正整数一样则成语相同.同一个正整数最多只会出现 3 次. 求一种排列,使得这个排列中,相同成语的间隔最小值最大,输出这个最小间隔的最大值. 相同成语的间隔为这两者中间的成语个数. 特别地,当每种成语都只出现一次时,把最小间隔的最大值视为 n . 分析: 1.若成语最大出现的次数是 2 时:比如有两个不同的成语 1  2 ,他们都出现过两次,那么为了使得最小间隔要最大,最好的构造就是两个 1 的间隔等于两个 2 的间隔. 1…
传送门 既然没参加过就没有什么小裙子不小裙子的了-- 顺便全是概率期望真是劲啊-- 因自过去而至的残响起舞 \(k\)增长非常快,大力模拟一下就行了 int main(){ scanf("%lld",&x),sum=2; if(x==1)return puts("2"),0; fp(i,3,19260817){ sum+=(sum>>1); if(sum>x)return printf("%d\n",i),0; } re…
题意 https://www.cometoj.com/contest/35/problem/C?problem_id=1498 思路 这题要用到一种比较小众的状压方法(没见过的话可能一时比较难想到). 首先观察题面,发现可以把一个人有另一个人没有的点数都视作同一种(转化一),然后点数之间也可以任意转化(转化二),不影响结果,经过如上转化,可以将任意情况转化为两方各有一些相同点数的手牌,然后不同点数的手牌只有一种或没有. (感觉说的好乱啊,举个栗子吧... \[ \begin{array}{} &…
传送门 \(A\) 咕咕 const int N=1005; int a[N],n,T; int main(){ for(scanf("%d",&T);T;--T){ scanf("%d",&n); fp(i,1,10)a[i]=n%10,n/=10; R int fl=1; fp(i,1,9)if(a[i]<a[i+1]){fl=0;break;} if(!fl)puts("Impossible"); else print…
传送门 \(A\) 咕咕咕 const int N=1e6+5; char s[N],t[N];int n,res; inline bool cmp(const int &x,const int &y){return x>y;} int main(){ scanf("%s",s+1),n=strlen(s+1); fp(i,1,n)t[i]=s[i];sort(t+1,t+1+n,cmp); fp(i,1,n)res=(res*10+t[i]-s[i]),res=…
双倍快乐 题目描述 Illyasviel:"你想要最长不下降子序列吗?" star-dust:"好啊!" Illyasviel:"老板,给我整两个最长不下降子序列,要最大的." 求序列 a 中的两个不相交的不下降子序列使得他们的元素和的和最大,子序列可以为空. 注 1:序列 a 不下降的定义是不存在 l<r 且 al​>ar​ 注 2:两个子序列不相交的定义是:不存在 ai​ 即在第一个子序列中也在第二个子序列中. 输入描述 第一行一…
A:签到. #include<bits/stdc++.h> using namespace std; #define ll long long #define inf 1000000010 #define N 510 char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}…
求和 题目大意: 数据范围: 题解: 脑筋急转弯可还行..... 我们发现只需要最后枚举个位/xk/xk 因为前面的贡献都是确定的了. 故此我们最后暴力统计一下就好咯. 不知道为啥我组合数一直过不去,暴力求过了呜呜. 代码: #include <bits/stdc++.h> using namespace std; typedef long long ll; char *p1, *p2, buf[100000]; #define nc() (p1 == p2 && (p2 =…
一道树题 题目大意: 给定一棵树,边的编号为读入顺序.现在规定,区间$[L, R]$的贡献$S(L,R)$为把编号在该区间里的边都连上后,当前形成的森林中点数大于等于$2$的联通块个数. 求$\sum\limits_{i = 1} ^ {N - 1}\sum\limits_{j = i} ^ {N - 1}S(i,j)$. 数据范围:$2\le N\le 10^5$. 题解: 水题. 我们发现,一棵树上假设联通了$k$条边,那么联通块个数就是$N-k$个.所以我们可以求出,所有区间下的所有联通块…
Contest14的本质:区间覆盖+Tarjan( A 把距离公式两边平方即可 注意要long long code #include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #define fo(a,b,c) for (a=b; a<=c; a++) #define fd(a,b,c) for (a=b;…
题目描述 小象同学在初等教育时期遇到了一个复杂的数学题,题目是这样的: 给定自然数 nn,确定关于 x, y, zx,y,z 的不定方程 \displaystyle \sqrt{x - \sqrt{n}} + \sqrt{y} - \sqrt{z} =0x−n​​+y​−z​=0 的所有自然数解. 当时的小象同学并不会做这道题.多年后,经过高等教育的洗礼,小象同学发现这道题其实很简单.小象同学认为你一定也会做这道题,所以把这道题留给了你.为了便于输出,你不需要输出每一组解 (x, y, z)(x…
题目描述 Takuru 是一名能力者,他在地震时获得了念力致动的能力.所以他经常用自己的能力去干一些奇奇怪怪的事情. 有一天他获得了一张 nn 个点的无向完全图,之后他使用了能力,导致这张图的 \frac{n(n-1)}{2}2n(n−1)​ 条边中的每一条都有 \frac{x}{y}yx​ 的概率遭到破坏而消失. 现在 Takuru 想知道这张无向图点集的全部 2^n2n 个的子集中,是独立集的子集数量的期望值. 一张无向图 GG 的一个子集是独立集的定义如下:此点集 SS,满足对于任意的 x…