题目描述 小猫有一个 2\times N2×N 的棋盘,每一个格子放着一个黑棋子或白棋子. 小熊觉得小猫的棋盘不够好看,想要把棋盘上的一部分白棋子替换成黑棋子,使得所有黑棋子都能够在仅允许上下左右四个方向走,且仅经过黑棋子在的格子的情况下两两互相到达. 小熊想知道至少要将多少个白棋子替换成黑棋子. 注意:不能将黑棋子替换成白棋子.     输入描述 第一行有一个正整数 NN (1 \le N \le 10^51≤N≤105). 接下来两行,每行 NN 个整数,描述整个棋盘.若第 ii 行的第 j…
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define ll long long #define maxn 100000 using namespace std; int arr[30],brr[maxn]; ll calc(ll t) { int n=0,m=0; while(t) arr[++n]=t%10,t/=10; while(n>…
题目:https://www.cometoj.com/contest/59/problem/F?problem_id=2681 题意:给你n个三元组 ai,bi,ci,如果某一对三元组满足    2*min(ai+aj,bi+bj) <= max(ai+aj,bi+bj),那么贡献+ci*cj 思路:我们可以看的出这个式子其实就是说这个的最大值要是最小值的两倍,但是我们不确定哪个大 我们就先假设 2*(ai+aj)<=  bi+bj 移项得 (2*ai-bi)+(2*aj-bj)<=0…
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 #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/A?problem_id=1528 容易发现那玩意增长的飞快,只要模拟就可以了 //❤ ayaponzu* #include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib>…
原题: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…
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 #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 #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 #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 $ 不一定是质数,而且数据范围看起来很快速幂所有貌似只能快速幂. 这个式子可以化…
传送门 既然没参加过就没有什么小裙子不小裙子的了-- 顺便全是概率期望真是劲啊-- 因自过去而至的残响起舞 \(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…
C2 首先用并查集维护\(1\)的连通块,然后用另外一个并查集维护第\(i\)行中,第\(j\)列之后的第一个\(0\)的位置,就是如果当前位置是\(1\)那么它的父亲是它右边的格子,否则是它自己. 时间复杂度\(O(nm\log m+nq)\). #include<bits/stdc++.h> #define Rint register int using namespace std; const int N = 1003, d[2][4] = {{0, 1, 0, -1}, {1, 0,…
传送门 \(A\) 咕咕咕 int main(){ for(scanf("%d",&T);T;--T){ scanf("%d%d",&l,&r); if(l==r)printf("%d %d %d %d\n",l,l,l,l); else printf("%lld %lld %lld %lld\n",1ll*r*(r-1),1ll*l,1ll*r,1ll); // printf("%lld %…
题目描述 小象同学在初等教育时期遇到了一个复杂的数学题,题目是这样的: 给定自然数 nn,确定关于 x, y, zx,y,z 的不定方程 \displaystyle \sqrt{x - \sqrt{n}} + \sqrt{y} - \sqrt{z} =0x−n​​+y​−z​=0 的所有自然数解. 当时的小象同学并不会做这道题.多年后,经过高等教育的洗礼,小象同学发现这道题其实很简单.小象同学认为你一定也会做这道题,所以把这道题留给了你.为了便于输出,你不需要输出每一组解 (x, y, z)(x…
LINK:Multiplication 4 害怕别人不知道我有多菜 那就上张图: 赛时 太慌了 (急着AK 题目不难却暴露我的本性 根本不思考无脑写 wa了还一直停不下来的debug 至少被我发现了10个漏洞 且最后还存在bug. 放弃治疗然后走人了.啊啊啊 下次再不认真思考我把番给戒了. 原本的想法是 有负数的时候很难办 先把0分开 然后负数两两组合 正数也是如此然后开始贪心. 最后特判k为1的情况 这个情况接一堆分类讨论 但是当时少讨论一种情况 代码过于繁杂 导致GG. 今天花了几分钟想了一…
Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vector> #define setIO(s) freopen(s".in","r",stdin) #define maxn 200004 #define mod 998244353 #define ll long long using namespace std; in…
好久没更博了,还是象征性地更一次. 依然延续了简要题解的风格. 题目链接 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::…
题意 https://www.cometoj.com/contest/52/problem/C?problem_id=2416 思路 这里提供一种容斥的写法(?好像网上没看到这种写法) 题目要求编号为 \(i\) 的节点不能放在 \(p_i\) 位置,那我们不妨假设没有这些条件,然后再用二进制容斥的方法减去不满足条件的情况(即固定某些 \(i\) 在 \(p_i\) 上,这样会好考虑问题一点). 然后我们面临的问题就是,计算 \(A\)(二进制)这些数不能选,\(B\)(二进制)这些位置不能填的…
题意 https://www.cometoj.com/contest/35/problem/C?problem_id=1498 思路 这题要用到一种比较小众的状压方法(没见过的话可能一时比较难想到). 首先观察题面,发现可以把一个人有另一个人没有的点数都视作同一种(转化一),然后点数之间也可以任意转化(转化二),不影响结果,经过如上转化,可以将任意情况转化为两方各有一些相同点数的手牌,然后不同点数的手牌只有一种或没有. (感觉说的好乱啊,举个栗子吧... \[ \begin{array}{} &…
双倍快乐 题目描述 Illyasviel:"你想要最长不下降子序列吗?" star-dust:"好啊!" Illyasviel:"老板,给我整两个最长不下降子序列,要最大的." 求序列 a 中的两个不相交的不下降子序列使得他们的元素和的和最大,子序列可以为空. 注 1:序列 a 不下降的定义是不存在 l<r 且 al​>ar​ 注 2:两个子序列不相交的定义是:不存在 ai​ 即在第一个子序列中也在第二个子序列中. 输入描述 第一行一…
题目链接:https://www.cometoj.com/contest/39/problem/B?problem_id=1577 题意:给你一个数列,求L 到 R 区间内 所有数列 (ƒn mod 2)的和. 思路:这题是个找规律的题目,首先数列都要对2取模运算,如果这个数是偶数 那么mod 2就是0,奇数就是1,所以这题等价于求 L 到 R 区间内奇数的个数. 1.当 k 为奇数的时候,我们发现数列的值对2取模后全为1,所以 ans = R - L + 1. 2.当 k 为偶数的时候,假设…
A:暴力,显然每两次至少翻一倍. #include<bits/stdc++.h> using namespace std; #define ll long long #define inf 1000000010 char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;} in…
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…
传送门 菜爆了--总共只有一道题会做的--而且也没有短裙好难过 为啥必须得有手机才能注册账号啊喂--歧视么-- \(A\) 解方程 推一下柿子大概就是 \[x-\sqrt{n}=y+z+2\sqrt{yz}\] 如果\(\sqrt{n}\)是无理数,那么就是 \[x=y+z,{n\over 4}=yz\] 那么要满足\(n\)必须是\(4\)的倍数,然后爆搜\({n\over 4}\)的因子,统计答案就行了 如果\(n\)不是无理数,那么 \[x=\sqrt{n}+(y-z)^2\] 这东西一看…
题面 思路: 函数f相当于是求一个点集f的直径,有一个性质是如果这个点集有多个直径一定相交于某一个点,或者一条边的中心,所以我们暴力枚举重心,计算以某个点为重心的点集对答案的贡献. 具体实现的时候,我们从一个重心开始深搜,计算其它点到这个点的距离.我们现在假设计算以当前点为重心,有多少个点集的直径是i.首先,之前所有半径小于i / 2的点随便选了,假设有sum个,那前面的点有2 ^ sum种情况.假设半径是i / 2的点有cnt[i]个,那只有这些点才可能构造出i的直径,并且,这两个点不能在一个…
传送门 太菜了连\(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(…