自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

%%%

%%%

  • 博客(222)
  • 收藏
  • 关注

原创 基于QT Creator的红黑树

采用QT的按钮实现插入删除等控制,采用QT的文本框输出红黑树。main.cpp#include "mainwindow.h"#include <QApplication>#include "rbtree.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow...

2018-11-15 14:49:53 646

原创 基于QT Creator的AddressBook

addressbook.cpp#include "addressbook.h"#include "ui_addressbook.h"AddressBook::AddressBook(QWidget *parent) : QMainWindow(parent), ui(new Ui::AddressBook){ ui->setupUi(this);}...

2018-11-15 14:42:04 357

原创 CodeForces 940F - Machine Learning (带修莫队)

题意:求区间数字出现次数的mex,带修改莫队算法小结问题:n个数,q次询问[l, r]内不重复数字个数。思路:由于区间数字种数不具有区间加和性质,故无法直接用线段数来处理。莫队算法是一种分块的思想,在已知[l,r]结果情况下,可以在O(1)的时间求出临近区间的解。如果将每个区间抽象成平面上的点,离线出所有区间结果的花费等价于求曼哈顿最小生成树。把区间分块,每块为root(q),算法的时间复杂度为O...

2018-06-16 00:38:33 429

原创 CodeForces 986A - Fair (BFS)

思路:BFS从多源同时求each货物到each地点的最短距离void nth_element(beg, nth, end) : 求前s个dist的和。#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 5;const int inf = 1e7 + 5;vector<int> g[...

2018-06-01 15:12:29 275

原创 CodeForces 981D - Bookshelves (线性结构dp)

题意:n个数划分成k组,求每组sum值进行与运算的最大值。思路:从高位向低位进行check,显然当某一位可以取1时,最大值该位一定取1。问题转化为check:在满足已经check过的高位取值的情况下,判断当前位是否可以取1。由于与运算的性质,要使某位为1,每个相与的数都必须在此位上也为1,故可以采用dp求解。定义状态dp(i, j): [1, i]数划分为j组,满足条件值为1。状态转移方程:dp(...

2018-05-29 13:12:56 358

原创 Educational Codeforces Round 44 D, E

D. Sand Fortress题意:找长度为k的序列,使得序列之和大于等于n,且|A(i)-A(i-1)| <= 1, A0 <= H,求最小的k。由于k与sum成单增关系,可以二分k的值来找最小的符合条件的k,check采用等差数列求和。注意要先确定上界避免数据过大由于mid = l + (r - l)/2 = r - (r-l)/2 属于 (l, r)为了避免无限循环check之...

2018-05-25 16:10:56 271

原创 Codeforces Round #483 (Div. 2) C, D

C. Finite or not?题意:判断p*b^k/q,k的取值任意时能否整除思路:即判断分母的素因子分解是否包含了分子的素因子分解。由于1e18的数据,无法在有限时间内分解,故采用除gcd的方法。除法时,无需每次gcd(b,q),每次令b = gcd(b,q)#include <bits/stdc++.h>using namespace std;typedef long l...

2018-05-16 21:29:18 154

原创 UVA 1395 Slim Span (Kruskal + 尺取法)

kruskal算法利用并查集来处理联通分支,扫描后得到最小生成树的边。本题要求最大边与最小边只差最小的最小生成树,感觉包含了尺取法的思想在里边。但由于L++后,无法直接维护并查集,复杂度上仍为O(m*m)?#include <bits/stdc++.h>using namespace std;const int maxn = 105;const int maxm = maxn*...

2018-05-10 21:34:04 132

原创 Codeforces 964D - Destruction of a Tree(思维 + DFS)

关键点:自底向上检查度数时若发现某一节点为偶数,同时可以destory此节点的子树。因为当前节点删去后,子节点度数-1可删去,孙子节点同理。#include <bits/stdc++.h>using namespace std;const int maxn = 200005;struct Edge { int to, next;}e[maxn*2];int hea...

2018-05-06 13:43:39 217

原创 HDU 5925 Coconuts (离散化 + bfs)

二维离散化,作图后容易理解,记录离散后各个x与y原来对应的长度#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 205;bool vis[maxn*2][maxn*2];int x[maxn], y[maxn], tx[maxn], ty[maxn];int ...

2018-05-05 23:01:40 157

原创 HDU 5927 Auxiliary Set (树形dp)

题意:判断每个给出节点是否为剩余节点的lca朴素的想法就是对每个点进行dfs判断各个子树上是否有重要节点。然而重复访问节点的次数过多,显然超时。于是想到对每个节点记录存在重要节点的子树个数,这样每次只要检查当前节点是否符合即可。同时对每次询问给出的节点,可以自底向上修改cnt值。注意:只有当前节点为不重要节点且cnt = 0时才修改其父亲的值。#include <bits/stdc++.h&...

2018-05-05 16:18:37 130

原创 HDU 5929 Basic Data Structure (思维 + 双端队列)

首先发现且非序列只要出现0,可以直接的出结果,于是维护最后一个零的位置。采用数组加两个指针的方式模拟双端队列#include <bits/stdc++.h>using namespace std;const int maxn = 200010;const int base = 200005;int deq[maxn*2], l, r;int deq2[maxn*2], l2...

2018-05-05 11:18:45 146

原创 Codeforces 964C - Alternating Sum(等比数列 + 逆元)

注意判定公比为1的情况, 再求逆元后,并非为a == b,而应该求出q值进行判断#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;typedef long ...

2018-05-03 19:35:51 205

原创 浙江省赛

J题问题抽象一下就是凑数[1, n]得到m我采取的策略是先贪心从大向小取至可以二进制拆分。#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long long ll;const int maxn = 100000;bool vis[ma...

2018-05-02 15:20:30 256

原创 NEUOJ 1343 Eat walnuts (容斥原理 + 逆元 + 唯一分解定理)

经典问题,求[1, n]中与m互素的数的和与平方的和#include <iostream>#include <vector>#include <cstdio>#include <algorithm>#include <cstring>#include <string>#include <map>#in

2018-04-25 20:41:17 398

原创 UVA 1262 Password (编码与解码)

太久没码代码了,,,码力爆炸。。各种奇怪的手抖。。。简单的做法就是暴力枚举从1到k注意字母的查重,我采用dfs依个判断每个字母的做法。#include <iostream>#include <vector>#include <cstdio>#include <algorithm>#include <cstring>using ...

2018-04-21 16:41:23 207

原创 UVA 1635 Irrelevant Elements (唯一分解定理 + 组合数)

这题需要分解的m为1e9不能先打表后分解直接分解外层循环为sqrt(m)然后再利用组合数的递推式进行求解#include <iostream>#include <vector>#include <cstring>#include <cmath>using namespace std;const int maxn = 100000;ve...

2018-04-16 21:38:43 183

原创 Codeforces 954C - Matrix Walk(思维 + 模拟)

问题描述:给定n个数的序列,判断是否可以为矩阵内的路径。思路:先判断出x,y的值,O(n)模拟一遍判断即可。对于y值的判断,我想着一遍扫描直接得出结果使得程序更加繁杂。#include <iostream>#include <cmath>#include <cstdio>using namespace std;const int maxn = 2000...

2018-03-28 21:25:47 176

原创 UVA 1626 Brackets sequence (最优矩阵链乘)

Update:递推顺序:由小区间到大区间。最小的区间为l == r,按照l = r + k的顺序来填表先初始化d(i, i) = x;for(i, 1, n) for(j, 0, n - i) 求解d(j, j + i)如何理解紫书上的递推方式?1. 首先,由状态转移方程中d[i][j]的其中一个状态d[i + 1][j - 1]可以得到枚举顺序。2. 其次,d[i][j]还可由两个子串的状态得到...

2018-03-07 20:12:29 168

原创 Codeforces 919D - Substring (dp + 拓扑排序)

思路:定义状态dp[i][j]表示在 i 点,j出现的最大次数,利用拓扑排序更新状态#include #include #include using namespace std;const int maxn = 300005;int n, m;char s[maxn];vector edges[maxn];int ans;int dp[maxn][26];int q[m

2018-02-03 10:13:16 311

原创 Codeforces 918D - MADMAX (记忆化搜索)

思路:必胜状态:存在一个后继是必败状态由dp[u][v][c] -> dp[v][x][e.c],意思是A走一步后,轮到B走,相当于先手在B记忆化搜索实现即可#include #include #include #include using namespace std;const int maxn = 105;struct Edge { int to, w;

2018-02-01 13:22:03 296

原创 Codeforces 918C - The Monster (贪心 + 思维 + 栈模拟)

思路:首先明确题意:找符合要求的区间个数很容易想到利用栈的括号匹配,枚举区间进行判断,此题多了问号的判断。括号匹配不用栈的实现bool check(string s) { int top = 0; for(int i = 0; i < s.size(); ++i) { if(s[i] == '(') top++; else top

2018-01-31 13:12:30 450

原创 2018 1月 月赛总结

a题n, m #include #include #include using namespace std;typedef long long ll;ll n, m, p = 100003;ll f[100005];ll qpow(ll a, ll b) { ll ans = 1; while(b) { if(b & 1) ans = ans

2018-01-29 11:06:33 191

原创 UVA 1616 Caravan Robbers (暴力 + 二分)

思路:二分法 + 暴力由于每个区间长度相同,所以对单位长度的区间必然最多被分为n份。这也就使得暴力枚举分母成为可能。#include #include #include #include using namespace std;const int maxn = 1e5 + 5;const double inf = 1e6 + 5;typedef long long

2018-01-26 14:13:03 262

原创 UVA 10507 Meeting with Aliens (暴力 + 结论)

思路:对任意一个线性序列,都由若干个"环"组成,所需的交换次数即环中元素个数 - 1,即n - 环的个数。枚举每个开头,复杂度O(n^2)#include #include #include #include #include using namespace std;const int maxn = 505;int a[maxn];int t[maxn];boo

2018-01-25 11:29:08 212

原创 UVA 1615 Highway (贪心, 区间选点)

思路:求出每个圆与x轴上交点,即可转化为区间选点模型。实现:按r排序,每次选取最右端放点。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #

2017-12-30 19:25:28 286

原创 UVA 1614 Hell on the Markets (思维 + 构造)

思路:关键在于1 结论:[1, sum(i)] 可以由 [a1, ai]组成。证明 : 数学归纳法,n = 1显然成立,假设n = i成立对n = i + 1时,需要凑出[sum(i) + 1, sum(i) + a(i +1)]由于sum(i) >= i,  1 实现:排序后从大往小取,由结论sum/2可得,进而sum/2 - ai, 可由[a1, ai-1]得到,可知最

2017-12-30 18:23:12 172

原创 UVA 1153 Keep the Customer Satisfied(贪心+优先队列)

思路:题目等价于已知n个任务的长度与右端点,求最多任务数。非常明显的贪心,按q选取?按d选取?都不能得到正确的解。贪心策略:1. 按照截止时间d排序,优先考虑更早截止的。2. 符合条件的便直接加入选择的队列中。3.不符合条件时,尝试与选择队列中时间最长交换,这样只会产生更优的解。#include #include #include #include #include

2017-12-30 14:10:41 173

原创 习题8-8 猜名次(Guess, ACM/ICPC Beijing 2006, UVa1612)

思路:贪心法,注意精度的控制,可以采取*100再四舍五入的方式转化为int求解value   round   floor   ceil    trunc-----   -----   -----   ----    -----2.3     2.0     2.0     3.0     2.03.8     4.0     3.0     4.0     3.05.5 

2017-12-30 09:30:51 345

原创 习题8-7 生成排列(Generating Permutations, UVa11925)

思路:冒泡排序的思想。题目要求从123 -> 到213,可以转换一下 从无序到有序可以用冒泡解决123 -> 213, 213变为123则123->213,同理123 -> 231等价于312 -> 123。注意处理多余的2操作即可。#include #include #include #include #include #include #include #incl

2017-12-29 17:30:55 268

原创 习题8-6 起重机(Crane, ACM/ICPC CERC 2013, UVa1611)

思路:选择排序的思想,每个数最多经过两次翻转到达正确位置。有点疑问:复杂度不是n方么。。。怎么能过。。。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #inc

2017-12-29 11:39:04 308

原创 习题8-5 折纸痕(Paper Folding, UVa177)

思路:典型的递归分形问题。第一步要找规律,开始时,我从旋转的角度思考,无法求解。之后发现以方向标画图: r -> ru -> rulu...发现每次增加的部分为原有部分逆序逆时针转90°。#include #include #include #include #include #include #include #include #include #include #i

2017-12-27 19:04:56 479

原创 习题8-4 奖品的价值(Erasing and Winning, UVa11491)

思路:贪心,由于数的特性,显然贪心可得正解,每次选取可选的最大值。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #incl

2017-12-23 15:52:52 232

原创 习题8-3 比特变换器(Bits Equalizer, SWERC 2012, UVa12545)

思路:我还蛮怕这种题的。。。。首先计算1的个数,若s多余t显然无解,之后先假设所有的问号变为t中对应字符。再次计算st中1的个数,若不等说明问号处有问题,则问号处部分不变为1。dif为不同数,dif += abs(s1 - t1)为总的不同处,ans = ? + dif/2。#include #include #include #include #include #inc

2017-12-23 15:38:13 250

原创 习题8-2 聚会游戏(Party Games, Mid-Atlantic 2012, UVa1610)

思路:构造题,挫败感max。orz。。。。容易想到ans为sort后中间两个字符串a,b之间的串。由于要求长度以及字典序最小,可以按照这两个来枚举构造。若某长度无解,则ans加上a串的当前字符。#include #include #include #include #include #include #include #include #include #incl

2017-12-22 22:12:44 261

原创 例题9-5 劲歌金曲(Jin Ge Jin Qu [h]ao, Rujia Liu's Present 6, UVa 12563)

思路:距离暑假第一次见到dp问题已经过去4个月了。现在以为dp问题利用了从相同状态出发能得到相同结果的性质。以空间换时间,记录下结果的搜索,对于递推顺序显然的题,可以直接采用填表法。此题一个更好的做法是只记录下最大长度之后逆着枚举t,找出最长时间。dp数组可采取滚动数组的形式。#include #include #include #include #include #

2017-12-22 14:47:48 293

原创 Codeforces Round #451 (Div. 2)

C. Phone Numbers (模拟+STL)思路:一种节省空间的做法是map + set s[maxn]筛选时,对每一个只需判断是否为后缀即可,判后缀可用string.substr()再进行比较.#include #include #include #include #include #include #include #include #include #in

2017-12-17 17:08:43 163

原创 例题9-4 单向TSP(Unidirectional TSP, UVa 116)

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define SF(a) scanf(

2017-12-16 11:54:26 232

原创 Codeforces 598E Chocolate Bar

思路:1. 首先注意到数据组数为1e4,每次算出的结果保留,待下次查询。2. 定义状态dp[i][j][k]为边长i,j的矩形要得到k块所需的最小花费。3. 注意状态转移,每次行列切割后,不是直接转移的到dp[i][j - a][k - a*i]之类。应当进行枚举,把目标k分散至分割后的部分。#include #include #include #include #includ

2017-12-14 14:35:39 258

原创 例题9-3 旅行(Tour, ACM/ICPC SEERC 2005, UVa1347)

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define SF(a) scanf(

2017-12-14 13:02:27 334

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除