题面 题意:你和朋友一起做了n道判断题,现在你知道你们两的答案,也知道你朋友对了k个,问你至少对了几个 题解:假设你和朋友n个答案都一样,那你是不是也对了k个,假设你和朋友有1个答案不一样,是不是,你至少对了k-1个, 如果你和朋友有x(x<=k)个不一样,最坏就是他刚好这x个都是对的,所以你只能对k-x个了 如果你和朋友有x(x>n-k)个不一样,最坏就是n-x个一样的都是错的,剩下k-(n-x)个才是对的 综合来看,如果你们有x个一样的,你就至少有n-abs(k-x)个是对的 #inclu…
题目链接: 2018 ICPC Pacific Northwest Regional Contest - I-Inversions 题意 给出一个长度为\(n\)的序列,其中的数字介于0-k之间,为0表示这个位置是空的.现在可以在这些空的位置上任意填入1-k之间的数字(可以重复).问最多可以总共有多少对逆序对.(如果\(i<j,p_i>p_j\),则称\((i,j)\)是一对逆序对) \(1\leq n\leq 2*10^5,\ 1\leq k\leq 100\) 思路 第一步,先证明最优的填…
2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) 思路: A Exam 思路:水题 代码: #include<bits/stdc++.h> using namespace std; int main(){ int k; scanf("%d",&k); ],s2[]; scanf("%s%s",s1,s2); ; int n=strlen(s1); ;i<n;i++)…
题目:https://vj.69fa.cn/12703be72f729288b4cced17e2501850?v=1552995458 dp这个题目网上说是dp+离散化这个题目要对这些数字先处理然后进行dp,这个处理值得学习一下,就是把数字范围为1~1e9,转化成一个顺序列表,这个顺序列表每一个不同的位置含有不同的难度,dp[i][j]代表前面i种选出j种的方案数. #include <cstdio> #include <iostream> #include <cstdlib…
题目传送门 题目大意: 给出n*m的网格,有红蓝两种颜色,每个格子都必须被染色,当一个格子被染成蓝色后,这个格子左上方的一块都必须被染成蓝色,问最后的方案数量. 思路: 按照题目条件,如果有一个格子被染成了红色,则这个格子的右下方要全部被染成红色,也就是这个给出的网格能让我们染色的,是一个左上方和右下方都是阶梯型的图形,而对于每一行来说,当一个格子被染成了蓝色,那么左边的所有格子都必须被染成蓝色,所以我们设 f[ i ][ j ] 表示第 i 行 第 j 个格子被染成蓝色的方案数量,那么这个dp…
题面 题意:给你 abcd(1e7),求a<=x<=b,c<=y<=d的,gcd(x,y)=1的数量 题解:经典题目,求从1的到n中选x,从1到m中选y的,gcd(x,y)=k的可以看hdu1695 ask(x,y)表示从1到n中选n,从1到m中选y的话 ans=ask(b,d)-ask(b,c-1)-ask(a-1,d)+ask(a-1,c-1) #include<bits/stdc++.h> using namespace std; typedef long lon…
SurfNow that you've come to Florida and taken up surng, you love it! Of course, you've realized thatif you take a particular wave, even if it's very fun, you may miss another wave that's just aboutto come that's even more fun. Luckily, you've gotten…
题目链接:http://codeforces.com/gym/101201 /* * @Author: lyucheng * @Date: 2017-10-22 14:38:52 * @Last Modified by: lyucheng * @Last Modified time: 2017-10-22 16:37:43 */ /* * 题意:2^k次方个人两两进行淘汰赛,排名高的人一定能胜过排名低的人,问你排名r的人的胜场期望 * * 思路:首先,如果r想赢i场的话那么一定要和2^i - 1…
A:Alphabet Solved. 签. #include<bits/stdc++.h> using namespace std; ]; ]; int main(){ scanf(); ); ;i<=n;i++) { f[i]=; } ;i<=n;i++) { ;j<i;j++) { if(s[i]>s[j]){ f[i]=max(f[i],f[j]+); } } } ; ;i<=n;i++) { maxn=max(maxn,f[i]); } cout<&…
A. Odd Palindrome 所有回文子串长度都是奇数等价于不存在长度为$2$的偶回文子串,即相邻两个字符都不同. #include<cstdio> #include<cstring> char a[1111111];int n,i; int main(){ scanf("%s",a+1); n=strlen(a+1); for(i=1;i<n;i++)if(a[i]==a[i+1])return puts("Or not."),…
B - Enlarging Enthusiasm 感觉做到过好多的dp题都会和单调性结合在一起. 思路:dp[ s ][ pre ][ res ] 表示的是已选择了s,上一个是pre, 还有res 的分数的方案数. 然后再枚举下一个位置的时候,把其他位置的也减去这个值,因为是单调递增的所以不会多减, 这样就能保证pre 和 当前要枚举的 i 位置的差值永远为 a[ pre ] - a[ i ] #include<bits/stdc++.h> #define LL long long #defi…
题目大意:给你 m 个式子, 问你最少再添加多少式子能使没有任何一种赋值方式使全部的式子为真. 并且在你给的式子中不能有非. 思路:根据题目给的m个式子可以建出2-Sat的图, 现在问你最少加多少个边使得2-Sat不成立, 我们可以发现我们给出的式子肯定是 a | a 的形式, 在题目中没有 ~p | ~q这种形式必定无解, 否则最多增加2式子就能完成, 我们枚举a, 取check如果所有都不行就输出2. #include<bits/stdc++.h> #define LL long long…
[题目链接] A - Alphabet 最长公共子序列.保留最长公共子序列,剩余的删除或者补足即可. #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; char s[maxn]; char t[maxn]; int dp[100][100]; int main() { scanf("%s", s); for(int i = 0; i < 26; i ++) { t[i] =…
A - Odd Palindrome 水. #include <bits/stdc++.h> using namespace std; #define N 110 char s[N]; inline bool work() { int len = strlen(s); ; i < len; ++i) { ]) return false; } return true; } int main() { while (scanf("%s", s) != EOF) { puts…
A:Exam Solved. 温暖的签. #include<bits/stdc++.h> using namespace std; ; int k; char str1[maxn], str2[maxn]; int main() { while(~scanf("%d",&k)) { scanf(); scanf(); , cnt2 = ; ); ; i <= len; ++i) { if(str1[i] == str2[i]) cnt1++; else cnt…
Problem K — limit 1 second Tournament Wins 这个题就是有2^n队伍,他现在的实力水平是第k位,采用的是淘汰制 问一下你他的胜场数的期望 这人能 win>=i 场的概率就是和它同一个半区的 2^i 个人都比他弱啊 所以去枚举这个2^i,E(X)=\sum P(X>=i) 直接搞一下就好了 我每次的概率都在前一次的算,这样避免了多次枚举,之后求下差就好,所以这个算法是2^n的 #include <bits/stdc++.h> using nam…
Problem V | limit 4 secondsGearsA set of gears is installed on the plane. You are given the center coordinate and radius of eachgear. For a given input and output gear, indicate what happens to the output gear if you attemptto rotate the input gear.I…
题意就是标题. 思路: 对于每个数 a 算出 1~a 的所有因数和sum(a),输出sum(b)-sum(a-1). 关键在于如何求出 sum. 首先发现因数∈ 1 ≤ i ≤ n ,每个因数在区间[1,n]内的出现次数(不考虑4=2*2这样因数重复出现,这种情况2只算出现一次)等于 n/i (向下取整). 然后用 t = n/(n/i) 可以找到与因数i出现次数相同的最大因数(这里可能有点难理解,例如1~100区间内21作为因数出现的数字有 21 ,42 ,63 ,84:即四次.按计算机整数相…
ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s RectangleProblem B: What does the fox say?Problem C: Magical GCDProblem D: SubwayProblem E: EscapeProblem F: DraughtsProblem G: History courseProblem H: C…
A. Radio Prize All boring tree-shaped lands are alike, while all exciting tree-shaped lands are exciting in their own special ways.What makes Treeland more exciting than the other tree-shaped lands are the raddest radio hosts in the local area: Roota…
*感谢两位浙江大佬带我飞 贴下成绩 div2 div1 *div2不是我打的上个厕所就5/11了 比赛小结 A [题目大意] 有n(n<=500)个机场,两两之间距离是g[i][j],每经停一个机场需要p[i]的时间维修 有m条线路,描述为出发机场,终点机场,出发时间,求航空公司至少需要多少架飞机 每条航线必须直飞 但是转机的时候可以劲停多个机场 [题解] 首先一架飞机能在完成航线A后去飞航线B的条件很显然.就是 表示两点间最短路.那么我们可以用这个不等式把问题转化为最小路径覆盖问题 我想了下这…
比赛链接:Contest Setting C题 题意:$n$道题目,每道题目难度为$ai$,选择$k$道难度不同的题目,有多少种选择方案.$1<=k<=n<=1000,1<=ai<=10^9$ 题解:问题转化一下(map,离散化均可):m种难度,每种难度有bi道题目,每次从m种中选择k种,把对应的题目数量相乘,求总和. 列出$dp[i][j]$:表示前j个物品以j结尾选择i个的方案数:$sum[i][j]$:表示从1-j分别作为结尾选择i个的方案数总和. $dp[i][j]=…
题意略. 思路: 这种字符串的模拟题,应该熟练使用stringstream. 详见代码: #include<bits/stdc++.h> using namespace std; map<string,string> mp; vector<string> store; void change(string& str){ ;i < str.length();++i){ str[i] = tolower(str[i]); } } int main(){ std…
题意略. 思路: 由于这是一颗无根树,我们可以贪心地来删去边. 详见代码: #include<bits/stdc++.h> using namespace std; typedef long long LL; ; struct edge{ int from,to,len,id; edge(,,,){ from = a,to = b,len = c,id = d; } bool operator< (const edge& e) const{ return len < e.l…
题意略. 思路: 这个题目求的是第一个可行解,由此想到用二分试探的方式来解决. 现在讲讲怎么验证该解是否合理: 先用floyd求出两两之间的最短距离. dp[ i ][ j ]表示,i 到 j 至少要充几次电,如果dist[ i ][ j ] <= 当前规定的试探值,那么令dp[ i ][ j ] = 1,否则赋值为INF,表示不知道要充几次电, 这个要靠第二次Floyd来更新.在第二次跑完Floyd之后,看dp数组中的最大值,如果最大值小于k,那么说明合法. 详见代码: #include<b…
2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACEGHK medium-easy: BJL medium: D ?????: I A. B. C. 对 \(R[],C[]\) 分别按奇偶性分段. 网! D. 考虑 check 一个串,枚举右走对应的前缀 pre,下走对应的后缀 suf. 把每行反串拼接中间连特殊字符,建 SA,能 match 上 p…
A:Zero Array 题意:两种操作, 1 p v  将第p个位置的值改成v  2  查询最少的操作数使得所有数都变为0  操作为可以从原序列中选一个非0的数使得所有非0的数减去它,并且所有数不能变为负数 思路:考虑第二种操作,显然,最少的操作数肯定是不同数的个数 用map 记录,特殊注意0的存在 #include <bits/stdc++.h> using namespace std; #define N 100010 unordered_map <int, int> mp;…
Solution A:Careful Thief 题意:给出n个区间,每个区间的每个位置的权值都是v,然后找长度为k的区间,使得这个区间的所有位置的权值加起来最大,输出最大权值, 所有区间不重叠 思路:贪心的想法,长度为k的区间的起始点肯定是某个区间的起始点,或者长度为k的区间的结束点肯定是某个区间的结束点. 因为存在最优的答案,它的起点不在某个区间的起点,那么只有两种情况. 1° 不属于任何已知区间 2° 在某个已知区间的内部 首先考虑第一种情况  如果不属于任何已知区间,那么根据贪心,我肯定…
题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可以选择一个边角的位置,每次都让一个怪移动到那里,同时暴力维护剩下的怪的位置,暴力走就可以了 不过后面发现好像直接随机也能过去? 下面我们队3个人的... #include <iostream> #include<string> #include<cstring> #incl…
题面 题意:给你2个串(长度1e6),在第一个串里找“s1s2s3”,第二个串里找“s4”,拼接后,是一个回文串,求方案数 题解:知道s1和s4回文,s2和s3回文,所以我们枚举s1的右端点,s1的长度乘以s2起始点为左边界的回文串的数量,累加就是答案. 所以先求s1,再求以每个点为左边界的回文串的数量 就是求每个后缀匹配第二个串的LCP(扩展kmp,或者hash+二分)二的话,后面部分用(Manacher+前缀和)就可以解决 #include<bits/stdc++.h> using nam…