2018 Multi-University Training Contest 2) HDU 6311 Cover HDU 6312 Game HDU 6313 Hack It HDU 6314 Matrix HDU 6315 Naive Operations HDU 6318 Swaps and Inversions…
Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description Alice and Bob are playing together. Alice is crazy about art and she has visited many museums around the world. She has…
  Time Limit: 5000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Description Give you a sequence of N(N \leq 100, 000) integers : a_{1},...,a_{n}(0 < a_{i} \leq 1000, 000, 000). There are Q (Q \leq 100, 000) queries. For each query l,…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4897 Problem Description There is an old country and the king fell in love with a devil. The devil always asks the king to do some crazy things. Although the king used to be wise and beloved by his peopl…
题意:构造出n个数 这n个数取值范围0-L,这n个数中存在取一些数之和等于k,则这样称为一种方法.给定n,k,L,求方案数. 思路:装压 每位 第1为表示这种方案能不能构成1(1表示能0表示不能)  第2为表示能不能构成2 ...  这样用d[1<<n] 的DP  像背包那样背 n次就可以 最后状态中第k位为1的就可以加上方法数. #include<cstring> #include<cstdio> #include<cmath> #include <…
bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6318 求逆序数的对数 #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<cmath> using namespace std; const int maxn=1e5+5; int is1[maxn],is2[maxn]…
//题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6322 //题目大意:给定 k,求第 k 小的数 n,满足 φ(n) 是合数.显然 φ(1) = 1 不是合数,只考虑 n ≥ 2 的情况.//思路:得到题意之后,查到了一张表(https://en.wikipedia.org/wiki/Euler%27s_totient_function)//得知当且仅当 n = 1, 2, 3, 4, 6 时,φ(n) 不是合数.第1小的K值是5,第二小的K值…
bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6315 /*hdu 1007 首先我们在建立线段树之前应该思考的是线段树的节点维护一个什么值, 在比赛过程中,我想到了维护a[i]的值但是时间复杂度太高,又想到维护a[i]/b[i]但是取下整, 这样的话无法更新∑的值. 在题解中,维护了b[i]的值,因为a[i]最初是0,所以在update过程中当a[i]>=b[i]时,a[i]/b[i]才>=1: 才会对sum有贡献,所以不妨维护b…
bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6314 ----. 又是一个数学题! 这个题使用容斥原理解决的,现场看dls推公式. 我也推了一遍: f[n][m]=sum { r=0...n,c=0....m } =C(n,r)*C(m,c)*(-1)^(c+r)*2^((n-r)*(m-c)) 列举至少a行b列的情况 f[n][m]=sum{u=a...n,x=b...m}*sum{v=0...n-u,y=0...m-x} =C(…
bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6313 参考dls的讲解: 以5*5的矩阵为例: 后一列分别对前一列+0+1+2+3+4操作: +0:10000 10000 10000 10000 10000 +1:10000 01000 00100 00010 00001 +2:10000 00100 00001 01000 00010 +3:10000 00010 10000 00100 00001 +4:10000 00001…
bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6311 从dls思路中,我整理一下自己的思路: 1.首先也是建图 2.建图结束后,一个dfs查找联通块和度数为奇数的点 从第二对奇数度点开始给奇数度点对开始加辅助边(>2*m+1) 3. 加辅助边后,一个dfs搜索所有的奇数度顶点,如果碰到一个虚边,则res+2: 最后一笔画的个数为max(res/2,1) /*hdu6311cover 题意:给出一张无向图,问多少次一笔画能覆盖整张图.…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6315 题目大意:告诉你a,b两个数组,a数组初始化为0,b数组告诉你长度和具体值,接下来有q次操作,add操作是从向区间[l,r]加1,query操作是求区[l,r]的ai/bi的总和. 解题思路:维护一个mn,表示这个区间里的a最少加几次才能有新的贡献.比如1最多对总和造成q的贡献,2最多q/2,q/3,q/4,一直到q/n.最少要加min(b[i]-a[i]%b[i])次才能有新的贡献,如果这个…
  //题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6330//题目大意:按照一定格式画出一个 a×b×c 的长方体.  #include <bits/stdc++.h> using namespace std; ][]; int main() { int T; scanf("%d",&T); while(T--) { int a,b,c; scanf("%d%d%d",&a,&b…
题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline ll read(){ ,f=;char ch=getchar(); ;ch=getchar();} +ch-';ch=getchar();} return x*f; } /***********************************************************/ ; int n, m; int dis[ma…
#include <stdio.h> #include <iostream> #include <cstdlib> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <stack> #include <queue> #include <set> #include <…
bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6312 输出前几项,都是"Yes" #include <bits/stdc++.h> using namespace std; int main() { int n; while(cin>>n) { cout<<"Yes"<<endl; } //cout << "Hello world!&…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4900 Problem Description There is an old country and the king fell in love with a devil. The devil always asks the king to do some crazy things. Although the king used to be wise and beloved by his peopl…
思路:首先红色肯定要放在最后面.前面蓝色和绿色dp求解. dp[i][j]  表示前面(i+j) 个 有 i 个蓝色塔  j个绿色塔 能造成最大伤害. //============================================================================ // Name : 1005.cpp // Author : // Version : // Copyright : Your copyright notice // Description…
题意:求所有自己的最小公倍数的和. 该集合是  2^ai  * 3^bi 思路:线段树. 线段树中存的是  [3^b * f(b)]   f(b)表示 因子3 的最小公倍数3的部分  为 3^b的个数  那么从小到大枚举a  对于当前的  ab  ,  如果之前的b小于当前的b  那么最小公倍数就为  (2^a) *  (3^b)   个数 就为 2^x     x表示a  b 都小于当前a b的个数 .  大于的部分 就直接是  2^a   * 线段树上[b,max]的和.   求好当前更新进…
题意:给定一个环形字符串,让他把它分成k份,使得最大的字典序 最小. 思路:二分答案,首先很明显答案所有可能是 n*n种  排序可以先求出最长公共前缀,这样比较就只需要比较公共前缀的下一位就能比较出两种答案的字典序大小,这里公共前缀我用 (2*n)*(2*n) DP 求出 .(也可用后缀数组).接下来就是判断了: 这里二分出来的答案就是字典序的上界,(对于没一个位置作为起点,长度越长字典序越大)那么对于当前答案每个位置都可以求出一个能向后跳的最大值(根据如果以这个点做一个串的起点那么字典序要小于…
Problem Description There is an old country and the king fell in love with a devil. The devil always asks the king to do some crazy things. Although the king used to be wise and beloved by his people. Now he is just like a boy in love and can’t refus…
Problem Description There is an old country and the king fell in love with a devil. The devil always asks the king to do some crazy things. Although the king used to be wise and beloved by his people. Now he is just like a boy in love and can’t refus…
题意:给定一个长方形网格,要把它切成完全相同4个部分(这里完全相同指可以旋转平移后能重叠).把4个重叠后每个网格对应有四个数字相加,得到一种方案,所有格子中和最小就是该种方案的值,在多种方案中,最后问最大的解能使多少. 思路:首先任意一种划分可以映射到4个相同的长方形, 也就是说一种不是长方形的方案 可以转化为一种长方形的.那么我们就只需要找4个完全相同的长方形就可以.一共有以下画法: 下面画图时基于n>m.边长要满足一定条件要自己注意. #include <iostream> #inc…
题意:给定n*m个格子,每个格子能填0-k 的整数.然后给出每列之和和每行之和,问有没有解,有的话是不是唯一解,是唯一解输出方案. 思路:网络流,一共 n+m+2个点   源点 到行连流量为 所给的 当前行之和.    每行 连到每一列 一条流量为  k的边,每列到汇点连 列和.如果流量等于总和则有解,反之无解(如果列总和不等于行总和也无解).  判断方案是否唯一 找残留网络是否存在长度大于2的环即可,有环说明不唯一. #include<cstdio> #include<cstring&…
目录 Contest Info Solutions A. run D. monrey G. transform H. travel I. car J. farm Contest Info Practice Link Solved A B C D E F G H I J K 6/10 Ø . . Ø . . Ø Ø Ø Ø . O 在比赛中通过 Ø 赛后通过 ! 尝试了但是失败了 . 没有尝试 Solutions A. run 题意: 白云每次可以移动\(1\)米或者\(k\)米,询问移动的米数在…
思路: 只有速度最大才有可能为1,速度不是最大肯定为0,那么就是 只需要操作那些速度最大的点,这些点求一个凸包,判断一下是不是在凸包边上即可. 有几个需要注意的地方: 1.最大速度如果为0   那么肯定所有都不行. 2.如果最大速度有重点那么 也都不行. 3.有些求凸包模板求出来的凸包可能有重点,要去重再求. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #inc…
题意: 有三种操作: 1 x y: 表示给x位置加上y 2 x y:查询[x,y]的区间和 3 x y:将 [x,y] 区间上的数变为最接近的 Fibonacci. 思路: 1 操作按正常单调更新,区间求和的操作. 2 操作按正常区间求和. 3  如果是之前该区间未被 第三类操作操作过,则更新到底,如果之前已经被第三类操作操作过则直接返回. 这里要打一个标记,要注意 在第1类操作单点加时要把标记往下更新. #include<cstring> #include<algorithm>…
Practice Link J. Different Integers 题意: 给出\(n\)个数,每次询问\((l_i, r_i)\),表示\(a_1, \cdots, a_i, a_j, \cdots, a_n\)中有多少个不同的数. 思路: 先分别离线求出\(a_1, \cdots a_i\)以及\(a_j, \cdots, a_n\)中有多少个不同的数. 再考虑有多少个数既在\([1, i]\)中也在\([j, n]\)中,再离线做一次. 考虑一个数第一次出现的时候,那么这个数下一次出现…
Practice Link A. gpa 题意: 有\(n\)门课程,每门课程的学分为\(s_i\),绩点为\(c_i\),要求最多删除\(k\)门课程,使得gpa最高. gpa计算方式如下: \[ \begin{eqnarray*} gpa = \frac{\sum s_ic_i}{\sum s_i} \end{eqnarray*} \] 思路: 首先删去的课程越多,gpa肯定不会变得更差. 所以我们肯定是删去\(k\)门课程. 考虑二分答案,check的时候要满足: \[ \begin{eq…
Practice Link J. Rikka with Nickname 题意: 给出\(n\)个字符串,要求依次合并两个串\(s, t\),满足将\(t\)合并到\(s\)中变成\(r\),使得\(s\)是\(r\)的前缀,并且\(t\)是\(r\)的一个子序列. 思路: 动态维护序列自动机,贪心插入即可. 代码: #include <bits/stdc++.h> using namespace std; #define N 1000010 char s[N], res[N]; int nx…