Atcoder CF 2017 TR I】的更多相关文章

Atcoder CF 2017 TR I 给定一个有n个点,m条边的图,求为每条边定向,使得从1出发和2出发的两个人可以见面的方案数. 先把问题转换成求all-不能见面的方案数.那么可以把图划分成这样一个集合: 用\(f[0/1][i]\)表示包含0/1的集合i,从0/1出发刚好能到达所有点的方案数 .注意是"刚好",所以统计的是闭合子图.利用容斥原理求出f,接下来的任务就是统计other集合中,与两个集合不相关的边的个数即可. #include <cstdio> usin…
一个圆上的整点数量不会很多.(Cf AIM TR 5 F) 二分图完美匹配求字典序最小的方案:先一遍匈牙利求出任意一组完美匹配.再跑一遍逐位确定,要求不能修改编号比它小的匹配.(LG 4100) 如果要把多项式的指数模$k$相同的项系数加起来放在一起,可以把该多项式模$x^k - 1$.(LG 5224) 把$n$进行正整数拆分(不同的正整数序列满足和为$n$的个数),直接用闸板法. 一棵树某一个点的度数$-1$就是其$prufer$序列中该点出现的次数.$n$个带标号的点组成$k$个有根树的方…
title: 爬虫入门二 beautifulsoup date: 2020-03-12 14:43:00 categories: python tags: crawler 使用beautifulsoup解析数据 1 beautifulsoup简介 BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过转换器实现文档导航.查找.修改. pip install beautifulsoup4 http://beautifulsoup.readthedocs.…
2017国家集训队作业Atcoder题目试做 虽然远没有达到这个水平,但是据说Atcoder思维难度大,代码难度小,适合我这种不会打字的选手,所以试着做一做 不知道能做几题啊 在完全自己做出来的题前面打"√" 计数器菌:11/104 agc001_d 如果两个字符确定相等就在中间连一条边,那么所有字符相同就等价于使整个图联通 然后发现至少要\(n-1\)条边,而事实上一个序列贡献的边数最大为\(\frac n 2\)条,而且一旦序列里有一个奇数贡献的边数就会减去\(\frac 1 2\…
[Atcoder Code Festival 2017 QualB/At3575] 101 to 010 有一个01序列,每次可以选出一个101,使其变成010,问最优策略下能操作几次? 考虑像 1111101 或者 1011111 这样的东西,它们最多能被操作的次数为长度-2 设\(l[i]\) 表示 \(i\) 左边第一个 \(0\) 的位置 设 \(f[i]\) 表示前缀的最大操作数 对于每个 \(a[i]=1\) 的位置,我们考虑进行转移 对于 \([i-2,i]\) 为 101 的情况…
Tr/ee 思路:按照下图所示连接 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define p…
A - AKIBA 模拟即可 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define pdi pair<db,int> #define mp make_pair #define pb push_back #define enter putchar('\n') #define space putchar(' ') #define eps…
[题意]给定h,w,d,要求构造矩阵h*w满足任意两个曼哈顿距离为d的点都不同色,染四色. [算法]结论+矩阵变换 [题解] 曼哈顿距离是一个立着的正方形,不方便处理.d=|xi-xj|+|yi-yj| 将矩阵旋转45°,转为切比雪夫距离(正方形).d=max{|xi-xj|,|yi-yj|} (图片来自Atcoder editorial) 定义旋转后的每个点坐标为(x-y,x+y).(实际处理中x-y+10000避免负数) 将新坐标按d划分区域,就可以发现每个点必须和八连通的块异色,如下图.…
题目链接:http://code-festival-2017-qualb.contest.atcoder.jp/tasks/code_festival_2017_qualb_c 题意:给出一个含 n 个顶点 m 条边的图,对于图中两点 u, v 之间可以添加一条边当且仅当 u, v 是通过三条边连接在一起时,求最多可以添加多少条边. 思路:猜结论,当给出的图是二分图时,sol = st1.size() * st2.size() - m,其中 st1.size(), st2.size() 二分图两…
http://arc075.contest.atcoder.jp/assignments 昨晚做的atcoder,今天写个简单题解. F题不会做,800point的,就跪了,要等zk大佬来做.zk能做2400的 C题.我看到数据范围就直接100^3的背包,但是如果数据大点还是可以做的,贪心,首先全部值加起来,如果是%10==0的话,就需要去搭错一题,一题最少分的,而且%10 != 0的. C #include <bits/stdc++.h> #define IOS ios::sync_with…
题目链接 题意 对于一个\(01\)串,如果其中存在子串\(101\),则可以将它变成\(010\). 问最多能进行多少次这样的操作. 思路 官方题解 转化 倒过来考虑. 考虑,最终得到的串中的\('1'\)的来源 1-1 | -101--101 | --1011----1011 | | | ----10111---------- --1101----1101 | ----11101---------- 所以,最终的\('1'\)对应着最初的串中的 \(1\) \(111...11101\) \…
Mujin Programming Challenge 2017 A - Robot Racing 如果每个数都是一个一个间隔开的,那么答案是\(n!\) 考虑把一个数挪到1,第二个数挪到3,以此类推,如果不行,证明前面中有个数肯定会被选择,所以任意选一个数到终点,继续这样的操作 最后剩下的乘一个阶乘即可 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #de…
题目:https://atcoder.jp/contests/code-festival-2017-qualb/tasks/code_festival_2017_qualb_d 题意:给一个 01 串,每次可以把 101 换成 010,问最多能换多少次 . 题解: 令 \(dp_i\) 表示 \(1\sim i\) 最多换多少次,记录一个 \(l_i\) 表示 \(i\) 左边最接近的 \(0\),\(r_i\) 表示 \(i\) 右边最接近的 \(0\),从而: \[dp_i=\max\beg…
A - Snuke's favorite YAKINIKU -- #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar(' ') #define enter putchar('\n') #define MAXN 40005 #define…
最近不知道为啥被安利了饥荒,但是不能再玩物丧志了,不能颓了 饥荒真好玩 A - XXFESTIVAL CCFESTIVAL #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar(' ') #define enter putchar('\n'…
A - Can you get AC? No #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define pb push_back #define mp make_pair using namespace std; typedef long long int64; char s[15]; int main() { scanf("%s",…
https://www.codechef.com/DEC17/problems/CHEFEXQ 题意: 位置i的数改为k 询问区间[1,i]内有多少个前缀的异或和为k 分块 sum[i][j] 表示第i块内,有多少个前缀,他们的异或和为j a[i] 表示 位置i的数 位置i改为k: 若 g=x1^x2^x3…… 把 x1 改为 k 后,那新的g=x1^x1^k^x2^x3…… 所以修改可以看做整体异或 修改后的值^原来的值 即 区间[i,n] 异或上a[i]^k i所在块单个改,后面的块整体打标…
https://www.codechef.com/DEC17/problems/CHEFHAM #include<cstdio> #include<cstring> #include<iostream> using namespace std; #define N 100001 int a[N],b[N]; ]; int num1[N],num2[N]; void read(int &x) { x=; char c=getchar(); while(!isdig…
https://www.codechef.com/DEC17/problems/VK18 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 1000001 ],dp[N]; ]; void read(int &x) { x=; char c=getchar(); while(!isdigit(c)) c=getchar(); +c-'; c…
https://www.codechef.com/DEC17/problems/CPLAY #include<cstdio> #include<algorithm> using namespace std; ]; int main() { int sumA,sumB; )!=EOF) { sumA=sumB=; int i; ;i<=;++i) { ) { ') { sumA++; -i+)/) break; } else { -i)/) break; } } else {…
https://www.codechef.com/DEC17/problems/GIT01 #include<cstdio> #include<algorithm> using namespace std; #define N 101 char s[N]; int main() { int T; scanf("%d",&T); int n,m; int OddG,OddR,EvenG,EvenR; int ans; while(T--) { OddG=O…
C - Same Integers 题解 要么三个都达到最大的数,要么三个都到达最大的数+1,判断是前一种情况的方法是不断垫高前两大的,看之后最小的那个和最大的那个差值是不是2的倍数 否则就是第二种情况 代码 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <ctime> #i…
我居然每道题都能想出来 虽然不是每道题都能写对,debug了很久/facepalm C - Many Medians 排序后前N/2个数的中位数时排序后第N/2 + 1的数 其余的中位数都是排序后第N / 2的数 #include <iostream> #include <cstdio> #include <vector> #include <set> #include <cstring> #include <string> #inc…
蒟蒻__stdcall终于更新博客辣~ 一下午+一晚上=一道计数题QAQ 为什么计数题都这么玄学啊QAQ Prelude 题目链接:这里是传送门= ̄ω ̄= 下面我将分几个步骤讲一下这个题的做法,大家不必一次看完,可以一点一点地推进思路,希望对锻炼大家的思维能力有帮助o( ̄▽ ̄)ブ. Step 1 首先要看出来这是一个计数题对吧... 计数题有很多做法,对于这个题,我们考虑合理枚举,即不重复不遗漏地枚举所有情况,然后乘上一个组合数,并通过前缀和优化来降低复杂度. Step 2 枚举什么东西呢? 我…
[题意]给定只含小写字母的字符串,要求分割成若干段使段内字母重组顺序后能得到回文串,求最少分割段数.n<=2*10^5 [算法]DP [题解]关键在于快速判断一个字符子串是否合法,容易发现合法仅当不存在或只存在一个奇数字符,其余字符均为偶数. 当涉及到奇偶性(%2)时,很自然能想到异或. 将小写字母a~z转化2^0~2^25,那么一个字符子串合法当且仅当其连续异或值是0或2^i(0<=i<=25). 令f[i]表示前i个合法的最少段数,sum[i]表示异或前缀和,则有: f[i]=min…
题目大意:共$2n$个价格$p_i$.两人轮流取.你每次取最大的,对方每次随机取.问你取的期望和是多少. 题解:从小到大排序,$\sum\limits_{i=0}^{2n-1} \frac{i*p_i}{2n-1}$ 卡点:无 C++ Code: #include<cstdio> #include<algorithm> using namespace std; long long n,s[200005]; long long ans; int main(){ scanf("…
题目链接 题意 给定一个字符串(长度\(\leq 2e5\)),将其划分成尽量少的段,使得每段内重新排列后可以成为一个回文串. 题解 分析 每段内重新排列后是一个回文串\(\rightarrow\)该段内至多只有一个字符出现过奇数次 考虑哈希到一个\(26\)位的\(01\)串,出现过奇数次的元素位置上的值为\(1\),否则为\(0\). 于是可以继续往下推:\(\rightarrow\)该段的哈希值为\(0\)或者是\(2\)的幂次. 转化 于是问题转化为:将字符串切割成尽量少的若干段,使得每…
题目链接 题意 给定字符串\(s\),可以在其中任意位置插入字符\(x\). 问能否得到一个回文串,若能,需插入多少个\(x\). 思路 首先统计出现次数为奇数的字符\(cnt\). \(cnt\geq1\) 显然无解 \(cnt==1\) 则回文串长度为奇数.找到中间位置,向两边check. \(cnt==0\) 则回文串长度为偶数.找到中间的两个位置,向两边check. // 很生气...打比赛时活生生将\(n\)跟在了\(cnt\)后面定义,于是用一个\(char\)类型的\(n\)去wa…
题目链接 题意 \(A+B\)个球排成一行,左边\(A\)个为红球,右边\(B\)个为蓝球. 最开始可以选择两个数\(s,t\),每次操作可以取左起第\(1\)或\(s\)或\(t\)个球.问有多少种不同的取球序列. Sample Sample Input 1 3 3 Sample Output 1 20 Explanation There are 20 ways to give 3 red balls and 3 blue balls. It turns out that all of the…
题目链接 题意 给定一个无向图,\(n\)个点,\(m\)条边(\(n,m\leq 1e5\)). 重复如下操作: 选择相异的两点u,v满足从点u出发走三条边恰好能到达点v.在这样的u,v点对之间添一条边(如果已经存在则无需再次添加). 问最多能添加多少条边. 我的思路 (是写给自己看的读者老爷可以跳过去的部分) 首先, 所有距离为奇数的点对之间都能添边.因为 3-1+3=5 5-1+3=7 5-1+5=9 7-1+3=9 7-1+5=11 7-1+7=13 9-1+3=11 9-1+5=13…