BUPT2017 wintertraining(16) #9】的更多相关文章

龟速补题.目前基本弃坑.已暂时放弃 D.I 两题. 下面不再写题意了直接说解法注意事项之类,直接放contest链接. https://vjudge.net/contest/151537 A.The Perfect Stall 很明显的二分图匹配,可以跑最大流 我是直接写的匈牙利算法,hungary,不是hungry (虽然读音差不多??? 事实证明浪了一个寒假我连hungary算法都不会写了 #include <cstdio> #include <vector> #include…
我觉得好多套路我都不会ヘ(;´Д`ヘ) 题解拖到情人节后一天才完成,还有三场没补完,真想打死自己.( ˙-˙ ) A - 温泉旅店 UESTC - 878  题意 ​ 有n张牌,两人都可以从中拿出任意张,各自的得分为他们手中牌上的数字的异或和.求A的得分小于等于B的方案数. 题解: ​ DP,\(dp[i][j][k]\)表示前i张牌,使得A得分为j,B得分为k 的案数.\(dp[0][0][0]=1\) \[ dp[i][j][k]=dp[i-1][j][k]+dp[i-1][j\wedge…
这场有点难,QAQ.补了好久(。• ︿•̀。) ,总算能写题解了(つд⊂) A. Beautiful numbers CodeForces - 55D 题意 ​ 求\([l,r](1\le l_i\le r_i\le 9\cdot 10^{18})\)的中的 可以被自己每一位上的数字整除的数 的个数. 题解: ​ 知识:如果m%a=0,则任意x, x%a = (x%m)%a. ​ 2520是2~9的lcm.因此任何时候都有2520%pre_lcm==0. ​ 因为2520%pre_lcm==0,…
拖了一周才完成的题解,抛出一个可爱的表情 (っ'-')╮ =͟͟͞͞❤️.对我来说E.F比较难,都是线段树的题,有点久没写了. A - Infinite Sequence CodeForces - 675A 公差为c,首项为a的等差数列是否有一项等于b. 注意c为0的情况. #include<cstdio> long long a,b,c; int main() { scanf("%lld%lld%lld",&a,&b,&c); if(c==0&am…
https://vjudge.net/contest/162590 A: 不难发现,当L=R时输出L,当L<R时输出2. B: 贪心得配对.1和n配 2和n-1配,对与对直接只要花1个代价就可以跳到.所以答案是(n-1)/2 C: 先考虑形式于aaaab的串变形.若有n个a,不难看出次数f[n]=2^n-1.接下来我们对于原串S从左到右扫描,若遇到a则cnt++,若遇到b则ans+=f[cnt] D: 构造aabbaabb..的串即可. E: Ans=max(s[i]). 通过dfs进行染色,对…
下面不再说明题意了请自行读题,直接放contest链接. https://vjudge.net/contest/151607 A.考虑当火车隔k站一停时 区间长度 >= k 的纪念品一定能买到 区间长度 <k 的纪念品最多覆盖一个停靠的站点 求出 n / k 个点, 每个点上覆盖的纪念品数累加即可 k 从 1 到 m 都需要求 我们只要把纪念品按区间长度排序 然后向后扫就可以了 总复杂度 O(nlog^2n) #include <cstdio> #include <algor…
题目链接 A.容易发现最后字符的对应都是一对一的 或者说我们没办法出现最后多对一或者一对多的情况 所以只要算出 ‘a’ - 'z' 每个字符最后对应的字符即可 #include <cstdio> #include <algorithm> ]; ], s[]; int main() { ], s2[]; scanf("%d %d %s", &n, &m, s); ;i < ;i ++) a[i] = i + 'a', b[i] = i; wh…
题目在这里 A.手动打表找规律得组合数 n -= 2, m -= 2, ans = C(n, m) #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ll fac[]; ll calc(ll x, ) { ll ret = ; , x = x * x % Mod) ) ret = ret * x % Mod; return ret; } int main() { ios::sync_with_stdio(…
题目在这里啊 A.最长上升子序列,范围很小所以写了简单的O(n^2)算法 #include <iostream> #define rep(i, j, k) for(int i = j;i <= k;i ++) #define rev(i, j, k) for(int i = j;i >= k;i --) using namespace std; typedef long long ll; ], f[]; int main() { ios::sync_with_stdio(false…
题目在这里 A.似乎是个并查集+??? B.10W的范围,似乎可以暴力来一发二分+sort? 但我猜正解可以O(nlogn)? C.单调队列入门题目 #include <cstdio> ], ans1[], ans2[]; struct queue_1 { ]; int l, r; queue_1(): l(), r() {} int front() { return q[l]; } void push(int i) { while(l <= r && q[l] + m…
这里是contest 8道题全部来源于 cf 的两场contest (出题人可真懒啊 Codeforces Round #411 (Div. 2)的ABCDE Codeforces Round #400 (Div. 1 + Div. 2, combined)的ADE 前一场的题解在这里 后一场的题解在这里…
BUPT2017 wintertraining(16) #5 D POJ - 2823 题意 给定n,k,求滑窗[i,i+k-1]在(1<=i<=n)的最大值最小值. 题解 单调队列或堆. 入队的条件是当前的进入了滑窗范围. 出队的条件是当前不在滑窗范围. 代码 我用堆写的,但是堆写错了个小地方,查了很久才发现. #include <cstdio> #include <cstring> #include <algorithm> #include <qu…
BUPT2017 wintertraining(16) #5 C HDU - 1021 题意 1, 12, 123, 1234, ..., 12345678910, ... 问第a到第b个数(inclusive)里有几个可以被3整除. 题解 前几项的各位数之和对3取模,可以找到规律--余数是1,0,0,1,0,0,1,0,0,1....也就是每三个数有两个可被3整除. 代码 #include <cstdio> #include <cstring> #include <algo…
BUPT2017 wintertraining(16) #5 B POJ - 2251 题意 3维的地图,求从S到E的最短路径长度 题解 bfs 代码 #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #define N 35 using namespace std; struct node{ int x,y,z,d; }s,e; int L,R,C; int…
BUPT2017 wintertraining(16) #5 A HDU - 1021 题意 There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2). 输入n,若F(n)能被3整除,输出yes,否则no 题解 列一下前几项F(i)可以发现n%4==2则是yes,否则no. 代码 #include <cstdio> #include <cstring…
BUPT2017 wintertraining(16) #4 F POJ - 1456 题意 每个商品有过期日期和价格,每天可以卖一个商品,必须在过期前出售才能收益,求最大收益. 题解 贪心,按价格排序,再将它放在过期日期当天出售,若当天已经用了,就往前找可用的日子,若找到了还要标记这一天已用. 代码 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> u…
BUPT2017 wintertraining(16) #4 G HDU - 5831 题意 给定括号序列,问能否交换一对括号使得括号合法. 题解 注意()是No的情况. 任意时刻)不能比(超过2个以上. 最后)和(的差距要在两个以内,且n必须是偶数. 代码 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; ch…
BUPT2017 wintertraining(16) #4 F ZOJ - 2278 题意 给定一个10*10以内的地图,和p(P<=30000)只老鼠,给定其出现位置和时间T(T<=1,000,000,000),求最多抓到几只老鼠. 题解 DP,f[i]表示按时间排序后抓第i个老鼠,最多能抓多少只. bfs计算每对位置之间的距离\(dis[x1][y1][x2][y2]\). \(f[i]=max(f[i],f[j]+1)\)当i,j两只老鼠的距离小于他们的时间差. j只用往前枚举50就够…
BUPT2017 wintertraining(16) #4 E ZOJ - 2277 题意 输出\(n^n\)的首位的数字. 题解 用科学计数法表示\(n^n=k\cdot 10^b\),那么\(n log_{10} n=log_{10} k+b\),b就是\(n^n\)的位数,因此是\(\lfloor n log_{10} n\rfloor\). \(k=10^{n log_{n}-b}\)取k的整数部分即可. 我比赛的时候没想到这样做,于是转为小数,再用快速幂暴力做的. 代码 #inclu…
BUPT2017 wintertraining(16) #4 D ZOJ - 2276 题意 n个数字绕成环,有两个指示数字的方块,每次可以顺时针或逆时针移动其中一个,步数是它当前位置的数字a[i],给定它们的初始位置,求最少几步可使两个方块停在一个位置上的,或永远不可能. 题解 bfs,两个方块当前位置为状态. 代码 #include <cstdio> #include <cstring> #include <algorithm> #include <queue…
BUPT2017 wintertraining(16) #4 C HDU - 5778 题意 给定x,找出使|y-x|最小,且每个质因子都出现两次的y(\(y\le 2\))50组测试数据,\(1\le x \le 10^{18}\) 题解 因为每个质因子出现两次,所以y一定可以开根号.于是我们枚举sqrt(x)附近的sqrt(y),质因子都只出现一次就是可行的. 比赛的时候我是打好质数表,然后枚举质因子.实际上直接枚举还更快. 代码 #include <cstdio> #include &l…
BUPT2017 wintertraining(16) #4 B POJ - 3045 题意 n(1 <= N <= 50,000) 个牛,重wi (1 <= W_i <= 10,000),力气si (1 <= S_i <= 1,000,000,000),堆成一个竖线,risk值为每只牛上面的w之和-它的si,使它的最大值最小,输出最小值. 题解 根据数据范围也可以知道要贪心. wi和si之和小的放上面.不要漏掉最top的牛的risk值. 证明:设i,j是相邻的两只牛,…
BUPT2017 wintertraining(16) #4 A HDU1219 题意 多组样例,每组给一行,输出该行各字母个数,每组输出之间输出空行 代码 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; char s[1000006]; int num[36]; int main() { while(~sca…
BUPT2017 wintertraining(15) #8C 题意 求第n(n<2^32)个非完全平方数m,以及\(\sum_{i=1}^m{\lfloor\sqrt i\rfloor}\) 题解 设1~m中有x个完全平方数(\(1^2,2^2,3^2,...,x^2\)). 那么有 \[ \begin{cases} n+x=m\\ x^2 < m\\ (x+1)^2 \ge m \end{cases} \] 等价于求满足\(m-\sqrt m < n\)的m的最大值. 于是可以二分.…
BUPT2017 wintertraining(15) #9A 题意 有n个纪念品,购买区间是\([l_i,r_i]\).求每i(1-m)站停一次,可以买到多少纪念品. 题解 每隔d站停一次的列车,一定能买到购买区间的长度≥d的纪念品. 长度比d小但包含了d的倍数的纪念品也可以买到. 所以,如果按长度给纪念品排序,用树状数组维护长度小于当前d的购买区间,那么就可以很快求出每个停靠点(d的倍数)有多少个长度不超过d的纪念品了. 代码 #include <cstdio> #include <…
BUPT2017 wintertraining(15) #8H 题意 求组合数C(n,i),i从0到n,里面有几个奇数. 题解 直接打表的话可能就直接发现规律了. 规律是n的二进制里有几个1,答案就是2的几次方. 证明: lucas定理有:C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p 然后取p为2. 所以展开后是C(0,0),C(0,1),C(1,0),C(1,1)的乘积.其中只有C(0,1)=0. 那么C(n,i)%2==1的条件就是n对应位为0,则i对应位必须是0,n对应…
BUPT2017 wintertraining(15) #8G 题意 给一个数组a,有n个数,m次操作.\(N, M ≤ 10^5, |A i| ≤ 10^9, 1 ≤ l ≤ r ≤ N, |d| ≤ 10^4\) 操作有四种, C l r d:更新区间[l,r],值都加上d,并且时间前进1 Q l r:查询[l,r]的区间和 H l r t:查询t时刻的区间和 B t:回到t时刻(一定是历史时刻),且t时刻之后的操作都作废了. 题解 这道题的关键是怎么更新区间和. 本来线段树更新区间和要pu…
BUPT2017 wintertraining(15) #8F 题意 1到n的排列,经过几次置换(也是一个排列)回到原来的排列,就是循环了. 现在给n(<=1000),求循环周期的所有可能数. 题解 问题等价于几个正整数加起来等于n,求最小公倍数的可能数. 因为1不影响最小公倍数,所以等价于求几个正整数加起来小于等于n,最小公倍数的可能数. 最小公倍数与每个质因子在正整数里最大出现次数有关,所以枚举质因子的幂,进行dp. dp[i][j]表示前i个质数,和为j时,最小公倍数的可能数. dp[0]…
BUPT2017 wintertraining(15) #8E 题意 长度为n(\(n<2^{63}\))的绳子,每隔长度L(1<L<n)做一次标记,标记值就是L,L是n的约数. 每轮标记都选一个L,且L之间两两互质. 求L的最多种数K.以及标记之和S的最大值. 题解 对n进行分解质因数,K就是不同质因子的个数,S就是p^{a_i}之和.不过题目要求L<n,所以当S算出来是n时,再除以一下最小的质因子. 分解比较小的n(<1e9),可以直接枚举,复杂度是\(O(\sqrt n…
BUPT2017 wintertraining(15) #8D 题意 给你x轴上的N个线段,M次查询,每次问你[l,r]区间里最多有多少个不相交的线段.(0<N, M<=100000) 限时15000 MS 题解 如果不看限时,当作是1000MS的话= =,那么可以用倍增来做. 先按右端点排序. 可以去掉一下包含了其它区间的区间,可以优化一点点. 用 f[i][j] 表示 i 节点下 \(2^n\) 个不相交的线段下标. 预处理出 f 数组. 查询的时候,左端点用二分,然后右端点用倍增来找.…