思维
菜得不行的sb
摸了
展开
-
Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) F. Identify the Operations
http://codeforces.com/contest/1443/problem/F#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#include <map>#include <set>#include <utility原创 2020-11-20 20:24:15 · 163 阅读 · 0 评论 -
Codeforces Beta Round #19 B. Checkout Assistant CF19B
记录状态dp[i]表示拥有的偷盗时间 那么买了一个物品就是+ti 偷就是-1 ti的范围很大 但是实际上最多只可以用n个 所以i的真实范围为[-n,n] 把整体范围往右移存在数组内做一个dp#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include原创 2017-10-14 17:40:21 · 198 阅读 · 0 评论 -
2017 ACM Arabella Collegiate Programming Contest A. Sherlock Bones GYM101350A
把问题转换为求区间内1为奇数的区间有多少个 那么直接记录从1开始为奇数和偶数的区间有多少就算出这个了但是有不合法的就是只有1个1的区间 所以再减一下 重复的再加回来#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#inc原创 2017-10-15 23:59:37 · 452 阅读 · 0 评论 -
2017 ACM Arabella Collegiate Programming Contest E. Competitive Seagulls GYM101350E
博弈经典套路 考虑把可选择的操作变成2个相同的 然后跟着对手操作为奇数的时候选一个奇数把两边留出相同长度的白色 为偶数的时候选一个2把两边留出相同长度的白色那么只有2 和 3 是不可以的 int t; sd(t); while(t--) { int n; sd(n); if(n==1)puts("first");原创 2017-10-16 10:55:21 · 349 阅读 · 0 评论 -
2017 ACM Arabella Collegiate Programming Contest G. Snake Rana GYM101350G
先算一下总的子矩阵个数总共最多只有20个点状压一下然后枚举 容斥一下 把求出来的答案减去包含1个点的子矩阵再加上包含2个点的减去3个点的……#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#include <map>原创 2017-10-16 12:47:30 · 311 阅读 · 0 评论 -
Game of Dice GYM101532E
http://codeforces.com/gym/101532/problem/Emeet in the middle 分成两份 然后后一份最终得到的A需要得到X时的BA*B = X mod (1e9+7) B = X*(inv[A]) mod (1e9+7)#include <iostream>#include <algorithm>#include <sstream>#include原创 2017-10-25 19:02:01 · 437 阅读 · 1 评论 -
51nod 1436 方程的解数
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1436大概就是一个按位分析k再加上快速幂就可以了#include <iostream>#include <algorithm>#include <sstream>#include <string>#inc...原创 2018-03-31 11:45:34 · 198 阅读 · 0 评论 -
Prince and Princess UVA - 10635
找出两个序列的最长公共子序列因为每个序列中每个数只出现一次 所以可以先记录每个数字在第一个序列中出现的位置 再把第二个序列的数字换成这个数字在第一个序列中出现的位置 这样求一个最长上升子序列就是答案#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#inc原创 2018-03-28 12:51:28 · 208 阅读 · 0 评论 -
Painting the balls SGU - 183
定义 dp[i][j] 表示最后一个在位置i 倒数第二个在j时候的代价 这个复杂度是O(n*m*m)的 所以需要优化转移的时候是枚举ijk 三个点 优化实际上就是固定了中间那个点j 移动最后面的点i 往前移动i的同时用f[j][i-m]更新最小值 同时这个最小值也能更新新的f[i][j]优化后的复杂度为O(n*m)#include <iostream>#include <algorit原创 2018-03-28 21:08:06 · 448 阅读 · 0 评论 -
CS Academy Round #74 (Div. 2 only) A B C D E
A找出有多少独角兽因为范围很小 所以枚举即可 int a,l,h; sddd(a,l,h); for(int i=0;i<=a;++i) { int leg = l - i*4; int ho = h - i; if(ho&1)continue; if(ho*2>leg)continue;原创 2018-03-29 16:20:16 · 221 阅读 · 2 评论 -
Codeforces Round #476 (Div. 2) [Thanks, Telegram!] D. Single-use Stones CF965D
看到题目先想到这明显是一个最大流 但是边太多了不可能用模版做 已知有 最大流 = 最小割 那么最小割一定是割了连续l个点 所以直接找最小割就是答案#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#include <m原创 2018-04-26 09:24:40 · 231 阅读 · 0 评论 -
Codeforces Round #300 E. Demiurges Play Again CF538E
首先考虑二分答案 假设是求max 那么把>=mid 的数字都变成1 另外的都变为0假设是A操作的时候那么肯定选一个需要放1尽量少的儿子下去 (因为二分的是mid) 假设是B操作那么要让他底下能选的地方都是1才能让他选到>=mid那么其实这样算出来的其实就是答案了当求min的时候就反过来 A操作的时候要让底下能选的都是0 B操作的时候选一个最少的0的下去#include <iostream>原创 2017-10-13 23:59:31 · 214 阅读 · 0 评论 -
Pandaland HDU - 6005
枚举一下边 求边的两个点u,v的最短路 但是不能直接从u到v或者v到u 求出最短路再加上边的花费#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#include <map>#include <set>#includ原创 2017-10-23 10:31:11 · 222 阅读 · 0 评论 -
AtCoder Grand Contest 019 B - Reverse and Compare
题意: 可以选择一个子串翻转一次 能得到多少个不同的串做法: 考虑一个串的首尾是相同的字母 假设它的长度为n 那么翻转[1,n] 等价于 翻转[2,n-1] 所以忽略掉翻转[1,n]的情况问题就转化为求有多少对相同的字母 总共可翻转的选择减去这些情况就是答案#include <iostream>#include <algorithm>#include <sstream>#incl原创 2017-08-27 00:21:14 · 307 阅读 · 0 评论 -
CS Academy Round #50 D.Min Races
贪心 class比它高的肯定是取b尽量小的 class比它低的肯定是取b尽量大的对b倒序 扫一遍 每次插入新的a 假如有比它的大的a就删掉 用这个来代表一场比赛中的第一名 删掉就意味着这个是可以跟他安排在同一场比赛并且都能判定为winner#include <iostream>#include <algorithm>#include <sstream>#include <st原创 2017-09-28 11:17:18 · 208 阅读 · 0 评论 -
Codeforces Round #435 (Div. 2) E. Mahmoud and Ehab and the function
一开始有很多答案 f0,f1,f2,f3,f4…,fm - n这个我们预处理出来这里是没有绝对值的每次修改l,r 其实只修改了a的总和 假设修改了总值v 那么要求的最小的原式 = abs(v+fj)记录一下改变的总和然后二分一下找最接近的fj#include <iostream>#include <algorithm>#include <sstream>#include <string>原创 2017-09-20 21:44:13 · 496 阅读 · 0 评论 -
2017 ACM Arabella Collegiate Programming Contest F. Monkeying Around GYM101350F
对单个点考虑 实际上每个点的结果只被最后的那种操作影响那么处理一下每个点对应的最后一个操作种类 然后对每个种类都和对应的点都检查一下是否被操作了2次转化成n个点 m个区间 多少点被覆盖>=2次的问题#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#incl原创 2017-10-17 17:23:41 · 329 阅读 · 0 评论 -
Codeforces Beta Round #8 C. Looking for Order CF8C
就是个记录路径的dp 但是每次枚举走1个点和走2个点会超时可以注意到明显每次尽量拿2个是比只拿1个更优的 考虑一个三角形 两边之和大于第三边因此对每个状态枚举拿2个 固定一个和枚举一个 这样就能枚举到所有情况#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue原创 2017-10-18 13:31:37 · 253 阅读 · 0 评论 -
MemSQL Start[c]UP 3.0 - Round 2 and Codeforces Round #437 (Div. 1) D. Buy Low Sell High
假如用i->j (i < j) 表示在i天买j天卖 那么i->k + k->j (i < k < j ) 与 上面的费用是一样的 因此这个最优解可以On算出来用一个小顶堆表示之前可以选择购买的物品 假设之前最小的可以在今天卖例如 第2天的可以在第4天卖赚到差价 当遍历到第5天时发现可以以第四天的价格买入赚到差价 这时候就可以把第2天和第4天的都拿来卖而第2天买入第5天卖的价值就等于原先第原创 2017-10-01 20:16:09 · 416 阅读 · 0 评论 -
MemSQL Start[c]UP 3.0 - Round 2 and Codeforces Round #437 (Div. 1) B. Ordering Pizza
首先全买B 然后考虑能不能把部分替换A提升总价值那么肯定考虑替换ai>bi的 先排个序 对于多出的披萨块ai bi是无影响的额外加入一部分ai bi 为0的数据对于每一个人 要不然就是全部替换为A最优 要不然就是尽量不要替换 所以对每个人都用尽量替换多的A和尽量替换少的A更新一下 #include <iostream>#include <algorithm>#include <sstre原创 2017-10-01 20:54:22 · 425 阅读 · 0 评论 -
Codeforces Round #441 (Div. 1, by Moscow Team Olympiad) C. National Property CF875C
其实就是检查第i 跟 i+1 序列是否合法 合法就不理它 如果不合法再变一下 最后再拓补检查一下构造出的解是否合法#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#include <map>#include <set原创 2017-10-20 21:07:59 · 289 阅读 · 0 评论 -
Codeforces Round #114 (Div. 1) B. Wizards and Huge Prize CF167B
考虑把得到的奖和获取的背包容量两个状态分开来算概率结果再把符合要求的两个状态的概率相乘#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#include <map>#include <set>#include <utili原创 2017-10-12 13:57:24 · 285 阅读 · 0 评论 -
Mr. Panda and Crystal HDU - 6007
应该注意到假如物品的费用可以被缩小的话 那一定是>=材料中最小的物品的费用所以可以先对每个物品求最小费用 然后再做一个完全背包#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#include <map>#includ原创 2017-10-22 21:59:13 · 581 阅读 · 0 评论 -
CodeChef - STRINGRA Strings and Graphs
题意:定义f(a),假如a是A的子序列那么f(a)为序列a在A中最小的最大序号现在构造一个有向图 V0,V1,……,Vn 在序列A中假如子序列c1能由子序列c2加一个数字得到那么连一条 ( Vf(C1), b, Vf(C2) ) ,b为一个标记现在给一个有向图 问能否构造出一个字典序最小的序列A 不能构造则输出-1做法:0连的点肯定是不一样的 先填上不一样的数字 然后从左往右对x->y填b原创 2017-08-25 22:24:59 · 226 阅读 · 0 评论