随笔分类 - 信息学竞赛 / codeforces
摘要:简单数学题,注意分类讨论即可,把特殊情况考虑清楚。 #include<bits/stdc++.h> using namespace std; int main(){ double a,v,l,d,w; cin>>a>>v>>l>>d>>w; if(v<=w){ double sp=sqrt(2*a*
阅读全文
摘要:贪心, 从左到右扫描,每个问号默认都变成右括号,如果左括号不够,那么就用前面的右括号去换左括号代价是-b+a,找代价最小的(set或者堆维护)。 #include<bits/stdc++.h> using namespace std; int const N=50000+10; char s[N];
阅读全文
摘要:如果2个圆半径相同,选取的点一定在一条直线上,如果2个圆半径不同,选取的点一定在一个圆上,根据这个可以求出他们的交点,可行的交点不会超过2个,然后从中选出角度比较大的点。 所以本题是计算几何或者还可以用模拟退火,调参数调到死。 #include<bits/stdc++.h> using namesp
阅读全文
摘要:cf1301f 1.题目大意 给你一个$n m$的矩阵,每个小格子都有一个颜色,颜色用整数表示,不超过$k$。每次你可以走向上下左右相邻的格子或者直接跳到某个颜色和你当前位置相同的格子上去。现在有$q$个问题,每个问题问你从$r1,c1$走到$r2,c2$最少需要多少时间。 2.数据范围 $
阅读全文
摘要:cf1301e Nanosoft 1.题目大意 给你一个$n m$的矩形,里面有四种颜色的格子,$Y$表示黄色,$B$表示蓝色,$G$表示绿色,$R$表示红色,要求你找出左上角全部都是红色,右上角全部都是绿色,左下角全部都是黄色,右下角全部都是蓝色的最大子矩形。有$Q$个询问,每个询问给你$r1
阅读全文
摘要:CF1303 1. Erasing Zeroes 1.1 题意 给你一个长度超过100的字符串,要求去掉最少的0,使得所有里面的1能够连续。 1.2 思路 简单题,直接找到第一个1和最后一个1中间的0的数量,就是答案了。 1.3 代码
阅读全文
摘要:题目大意: 类似于找鞍点,但是题目居然要把n和m换一下,神奇。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int const N=1000+10; 4 int const inf=1e9+10; 5 int a[N][N],r[N][2],
阅读全文
摘要:题目大意: 给你一个n*m的矩阵,每个格子可以向上下左右走,格子可以重复经过,但是不能走过同一条路。 问是否存在从左上角开始的的路径,如果存在,就输出这个路径,用重复次数+方向(长度不超过4),才表示路径。 题解:我们发现可以走完所有的方向,比如我们可以不断向右走,然后不断向左走,然后向下,然后不断
阅读全文
摘要:题目大意:长度为n的序列,有m个1,问最多可以有多少子序列至少包含1个1。 很明显,我们要平均分配0这样肯定是最优的。 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 int const N=1e5+
阅读全文
摘要:题目大意: 给你n个数,有些数是未知的,要求给未知数的赋值,使得相邻两个数的最大绝对值最小。 思路: 本题可以三分。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int const N=2e5+10; 4 int a[N],n,t; 5 in
阅读全文
摘要:https://codeforc.es/problemset/problem/1217/C 这题明显是$O(nlogn)$的做法,因为二进制的位置还是很有限的,首位连续的0我们可以用前缀和来判断。 1 #include <bits/stdc++.h> 2 using namespace std; 3
阅读全文
摘要:https://codeforc.es/problemset/problem/1216/F 有直线上n个位置,每个位置上可以花费i的代价使得联网,某些位置可以放置路由器,放路由器的代价也是i,放置了路由器以后,可以让[i-k,i+k]的范围内上网,要求每台电脑都可以上网,最少需要多少代价。 思路:
阅读全文
摘要:https://codeforc.es/problemset/problem/1216/E2 同e1,由于k最大是$10^{18}$,所以我们不能预处理,只能每次二分的时候临时去计算。 1 #include <bits/stdc++.h> 2 using namespace std; 3 #defi
阅读全文
摘要:https://codeforc.es/problemset/problem/1216/E1 求1121231234...序列里面第k个数字,k不超过10亿。 我们只要预处理一个sum数组,然后每次二分一下(其实不二分也可以) 1 #include <bits/stdc++.h> 2 using n
阅读全文
摘要:https://codeforc.es/problemset/problem/1216/D 贪心: 找出最大的a[i],令为t,即假设这个t就是原来的x 然后b[i]=t-a[i]; b[i]表示每个缺了的数量。 最后求一个所有b[i]的最大公约数。 答案就是累加b[i]/gcd 1 #includ
阅读全文
摘要:https://codeforc.es/problemset/problem/1216/C 判断一个矩形是否被另外两个矩形完全覆盖,这题是我是用离散化的方法来做的。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int x[7],y[7],tx
阅读全文
摘要:https://codeforc.es/problemset/problem/1216/B 这题还是贪心,直接排序即可 。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int const N=1000+10; 4 int a[N],n,b[N
阅读全文
摘要:https://codeforc.es/problemset/problem/1216/A 本题直接$O(n)$贪心。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int const N=200000+10; 4 char s[N]; 5 i
阅读全文
摘要:http://codeforces.com/problemset/problem/1217/E 这题的思路是: 1.首先不能有进位 2.由于要求和最小,所以我们只要选择两个数就可以了。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int co
阅读全文
摘要:http://codeforces.com/problemset/problem/1217/D 这题的思路是构造,我们可以知道颜色最多只需要两种,然后按照dfs的顺序。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int const N=50
阅读全文