自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(756)
  • 资源 (1)
  • 收藏
  • 关注

原创 HDU3624 Digital Calculator——算数表达式求值

    最近在拿LLVM写玩具语言, 实现词法分析器和语法分析器后想做做测试, 这道题刚好可以帮忙测二元表达式的求值。    文法规则题目中给了, '^'右递归, ‘±×/%’左递归, 一元的‘-’可以在前面补个0方便处理, 括号递归定义即可。 简单写成这个样子:bin_expr := primary (binop primary)*binop := '+' | '-' | '*' | '/' | '^' | '%'primary := (digit)+ := '(' bin_exp

2021-08-19 11:40:14 258

原创 简易webserver的设计与实现

简易webserver的设计与实现    最近学习IO多路复用的过程中尝试写了一个webserver, 使用Epoll多路复用(边沿触发)+线程池技术, 实现了半同步半反应堆模型. 通过状态机解析http/1.1 GET请求, 可根据请求路径调用自定义接口.这里记录一下设计与实现的过程.    项目地址1 编译&运行    github上的项目是编译好的,二进制文件在bin目录下,运行时cd到bin目录执行./SimpleWebServer即可(注意由于路径问题一定要在bin目录下运行).默

2021-07-21 21:57:18 1780 1

原创 Codeforces 1130 Connect——水题

康复训练#include <bits/stdc++.h>using namespace std;const int maxn = 100;int n;int r1, c1, r2, c2;char str[maxn];int G[maxn][maxn];int tot;bool vis[maxn][maxn];typedef pair<int , int&...

2019-03-09 22:10:07 441

原创 Codeforces 1131D Gourmet choice——差分约束

题意:给定一张比较表,给行列赋值使得比较表成立,并且最大值最小思路:差分约束,求解最长路/*** x > y : x >= y + 1;* x < y : x <= y - 1;* x = y : x >= y x <= y* maxlongpath: u -> v :* if (dis[v] < dis[u] + cost) d...

2019-03-09 21:34:51 452

原创 Codeforces 1107E Vasya and Binary String——dp

参考poj1390#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 105;int n;char s[maxn];int a[maxn];int c[maxn], len[maxn], cnt;ll f[maxn][maxn], cost[maxn];...

2019-02-10 23:31:35 322

原创 Codeforces 1102F Elongated Matrix——状压dp

dp[s][i][j]表示集合s以i开头以j结尾的最大k值#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const int maxn = 16;const int maxm = 1e4 + 10;int n, m, all, mat...

2019-01-31 23:26:00 323

原创 Codeforces 1077F2 Pictures with Kittens (hard version)——单调队列优化dp

题意:从n个数中选x个,要求任意连续k个必须有数被选中,问最后x个数的和最大是多少1<=n,k<=5000, 1<=x<=n思路:设dp[i][j]为选中a[i]且选了j个时的最大和,则dp[i][j] = max{dp[t][j-1]|i-k<=t<i}+a[i]考虑单调队列优化,发现循环的时候外层j内层i就可以实现,对于dp[i][j],...

2018-12-19 22:43:22 334

原创 Codeforces 1076G Array Game——线段树+博弈

题意:有一种双人游戏规则如下:n个格子排成一排,编号1~n,每个格子都有一个数值a[i],开始把骰子扔到1号格子,并把1号格子的数值减1,然后双方轮流操作,每次操作从骰子所在的格子(假设编号为x)开始,选择[x,x+m]并且数值大于0的格子,将骰子扔到这个格子上,并把这个格子的数值减1,不能操作者输现在有两种区间操作1 将区间[l,r]的数值加上d2 询问在区间[l,r]进行游戏先...

2018-12-11 11:02:23 407

原创 Codeforces 1076F Summer Practice Report——贪心+dp

题意:你有n个纸条,现在你要用0和1去写满这些纸条(每个纸条只能写一行),每个纸条都给出了一个x和一个y,表示要求写的0的数量和1的数量,并且规定任何时候都不能有超过k个0连续,任何时候都不能有超过k个1连续,注意假设写完一个纸条和它后一个纸条是连续的,也就是说一个纸条末尾的0或1也要算在它后一个纸条的开头。1<=n<=3e5,1<=k<=1e6,1<=x<...

2018-12-04 17:47:39 361

原创 Codeforces 1076D Edge Deletion——最短路+dfs

题意:n个点m条边的无向连通图(无自环、重边),现在要删除一些边使得图最多剩下k条边,并且这样的点尽量多:这个点到1号节点的最短路不变思路:建出最短路树,统计边数,然后跑一遍dfs,在回溯的时候判断边数与k的关系,若边数>k就使边数减一,否则记录答案#include <bits/stdc++.h>using namespace std;const int m...

2018-11-19 10:12:29 308

原创 Codeforces 1076E——回溯

题意:给出一棵以1为根的有根树,边权全部为1,点权初始全部为0,给出m个查询,每个查询给出三个变量v d x,表示将v节点的子节点(包括自己)中与v之间的距离<=d的节点的点权增加x,问最后每个节点的点权是多少1<=n<=3e5, 1<=m<=3e5,1<=v<=n, 1<=d, x<=1e9思路:开一棵线段树表示某个深度上增加的值,这...

2018-11-15 14:00:26 368

原创 斯坦纳树——hdu 4085

最近打全国高校绿色计算机大赛遇到了一个斯坦纳树(决赛第二阶段第三题),当时网上找了模板水过去了,赛后学习一下【一】什么是斯坦纳树斯坦纳树问题是组合优化学科中的一个问题。将指定点集合中的所有点连通,且边权总和最小的生成树称为最小斯坦纳树(Minimal Steiner Tree),其实最小生成树是最小斯坦纳树的一种特殊情况。而斯坦纳树可以理解为使得指定集合中的点连通的树,但不一定最小。【...

2018-11-12 20:32:57 384

原创 ZOJ 4061 Magic Multiplication——暴搜

题意:规则举例:1234*5678=5678101214161516212420242832,现在给出最终串,以及两个原串的长度,问两个原串是多少,设原串为A B,多解先令A尽量小,然后再令B尽量小所有传的长度都在2e5以内,除非串只有一个0,否则没有前导0思路:现场赛的时候拿到这个题一开始没什么思路放掉了,最后也没时间想了,赛后想一想其实暴搜就可以,因为匹配的概率本来就比较低,所以递归总...

2018-11-09 22:09:14 275

原创 Codeforces 1073A——防自闭

#include <bits/stdc++.h>using namespace std;const int maxn = 1010;int n;char s[maxn];int cnt[26];int main() { scanf("%d", &n); scanf("%s", s); bool ans = false; for (i...

2018-11-02 20:43:16 321

原创 Codeforces 1073B——防自闭

#include <bits/stdc++.h>using namespace std;const int maxn = 2e5 + 10;int n, a[maxn], b[maxn], pos[maxn], vis[maxn];int main() { scanf("%d", &n); for (int i = 1; i <= n; i++)...

2018-11-02 20:28:30 302

原创 Codeforces 1073C——思维

题意:一个机器人在(0,0),给出n个指令,指令的种类为L R D U,分别代表左移一步 右移一步 下移一步 上移一步,现在给出一个终点(x,y),要通过改变序列中的一些指令使得机器人最终停在(x,y),并使得花费最小,输出最小花费(原本就能达到输出0,无解输出-1),只允许把一个指令更改为任意一个指令,不允许插入或者删除指令,花费的计算为改变指令的最大小标减去改变指令的最小下标+1,即区...

2018-11-02 20:15:48 305

原创 Codeforces 1073D——暴力

题意n个售货车排成一个圈,编号1~n,每个售货车卖一种冰激凌,价格为a[i],数量无限,现在你有T块钱,从1号点出发,无限转圈,每到一个售货车,如果你能买一个冰激凌,那么一定买一个,否则不买,直到钱少到无法买冰激凌为止,问你能买多少个冰激凌1<=n<=2e5,1<=T<=1e18,1<=a[i]<=1e9思路求一个圈的贡献,然后尽量把这个圈去掉,...

2018-11-02 08:53:02 395

原创 Codeforces 1073E——状压+数位dp

题意输入l r k,输出区间[l,r]内数位种数不超过k的数字之和,比如l=10,r=50,k=1,答案就是11+22+33+44=1101<=l<=1e18,1<=e<=1e18,1<=k<=9思路比较明显的数位dp,因为要考虑当前所用的数位种类所以要把用过的数位状压一下,用dp[i][s]表示从低到高递推到第i位,所用的数位集合为s时的数字个...

2018-11-01 22:06:56 373

原创 CodeForces - 572C——思维

题意:给定三个木棍,长度为a b c,现在可以给任意木棍增加任意长度(整数),但是增加的长度总数不能超过l(3e5),问有多少种增加方式使得增加完长度后的三个木棍可以构成一个三角形思路:刚开始想到枚举一个最长的木棍,然后枚举该木棍增加的长度,然后计算另外两个木棍的合法情况数,但是不是很好计算,因为合法即要考虑两边之和大于第三边,有要考虑另外两个木棍增加长度后不能超过当前枚举的木棍的长度(因为我...

2018-10-31 14:27:05 287

原创 HDU 6237 A Simple Stone Game——思维

题意:有n(1e5)堆石子,第i堆石子有a[i](1e5)个,现在可以进行任意次操作,每次操作可以把一个石头从一堆挪到另一堆,问最少操作几次可以达成这个条件:存在一个x,使得每堆的石子数量都是x的倍数思路:首先对石子总数进行质因分解,x一定是这些素因子中的一个,这个是我凭感觉蒙的,事实证明确实是对的。然后枚举素因子x,算每个素因子对应的最小移动次数,我们设b[i]=a[i]%x,那么我们对b从...

2018-10-29 16:56:10 238

原创 HDU - 6274 Master of Sequence——二分

按a的值分组,处理一下余数,二分一下就可以了但是我二分上界设置的1e18,在计算过程中爆炸了,正确的上界应该是1e14真的调了很久才意识到这个问题。。。明天就打区域赛了。。。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1010;const i...

2018-10-25 15:09:00 203

原创 poj2954 Triangle——pick定理

题意:给定一个三角形,三角形的三个点都是整数点,问有多少个整数点严格在三角形内部思路:典型的pick定理题目,公式为s=a+b/2-1,s为整数顶点的多边形面积,a为它内部的整数点, b为它边上的整数点(包括顶点),那么题目要求的其实是b=(2*s+2-a)/2s可以通过向量的叉积运算得到,a可以通过gcd得到,两个点形成的线段包含的整数点为它们横坐标差值的绝对值和纵坐标差值的绝对值的gc...

2018-10-24 16:49:19 209

原创 HDU 6266 Hakase and Nano——思维

首先明确这是一个不公平的游戏,作弊的那个人一定更有利,由此猜测所有作弊的人必胜,除非条件实在太差, 我们要找的就是这些作弊也挽回不了的局面,思考后可发现作弊的一方拿只有一个石子的石头堆没有办法,因此从这上面出发,得到下面的结论:1.先手时必胜,除非石子总数是三的倍数且每一堆都只有一个石子2.后手时若对手能给你构造出第一种局面的话那么你必败,否则必胜#include <bits/...

2018-10-22 20:43:44 229

原创 HDU 5558 Alice's Classified Message——后缀数组+set+二分+rmq

15合肥签到题,不会后缀自动机只能用后缀数组来凑了我们要完成的工作是对s的每一个后缀suf[i],找以j(0<=j<i)为起点的一个子串,使得这个子串与suf[i]的公共前缀尽量长其实后缀数组的做法挺明显的,就是对于一个后缀suf[i],首先将它前面的后缀的rank值用set保存,然后拿rank[i]在set里二分找两个与rank[i]最接近的rank,最大匹配一定在这两个ra...

2018-10-22 00:18:38 200

原创 ZOJ - 3981 Balloon Robot——思维

先选1作为起始点跑一遍不高兴值,按不高兴值从小到大排序,然后顺序扫描,当要把第i个位置变为0时,实际上就是将i前面的元素+m,然后整体-unhappy[i]#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 10;typedef long long ll;int t, n, q;ll m,...

2018-10-18 23:15:43 229

原创 HDU 5977 Garden of Eden——点分治

上来按照dp的思想没什么头绪,因为5e4*(1<<10)有点大,所以往暴力上想了,树上暴力的话一般是往点分治上想,稍加思考发现这题只要枚举子集就可以在n(log(n))^2内解决,注意root是全局变量会改变,要存一下,因为这个直接自闭#include <cstdio>#include <cstring>#include <iostream&gt...

2018-10-18 15:58:29 206

原创 HDU 5976 Detachment——贪心

很容易想到最优策略是2*3*4一直乘到前缀和小于n的最靠后的位置,设这个位置为p当segma(2,p)==n时明显答案就是mul(2,p)但是当segma(2,p) != n时会有一个余项,设为need,need=n-segma(2,p),显然现在项数不会再增加了,我们只能把need按照一定的策略分配给前面的元素才能使结果更大,按照直觉我们应该将need平摊给前面所有的元素,但是要注意ne...

2018-10-17 22:34:43 202

原创 HDU - 4010 Query on The Trees——Link Cut Tree

LCT模板题,link和cut是基本操作更新一条链(u,v)就是做 mroot(u); access(v); splay(v)操作;然后给v打上标记,splay时上下推即可求一条链(u,v)的最小值,同样做 mroot(u); access(v); splay(v);然后求v的最小值即可 上述的mroot(u); access(v); splay(v);实际上是提取链(u,v),先将u...

2018-10-16 22:35:39 197

原创 HDU - 5514 Frogs——容斥

假设a和b都是m的因子,设t=lcm(a,b),若t<m,则t也是m的因子根据这个结论我们可以在m的因子中进行容斥,因子用fac数组保存,设vis[i]为fac[i]需要贡献的数量,num[i]表示fac[i]实际贡献的数量,那么fac[i]应该对答案贡献(等差数列之和)*(vis[i]-num[i]),然后更新后面的因子j(i+1<=j<=因子总数),num[j] += (...

2018-10-13 17:17:33 186

原创 UVALive 3403 Mobile Computing——爆搜

有点像状压dp的爆搜#include <bits/stdc++.h>using namespace std;typedef pair<double, double> P;const int maxn = 10;const double eps = 1e-6;int dcmp(double x) { if (fabs(x) < eps) retu...

2018-10-13 10:51:13 258

原创 UVALive 4726 Average——斜率优化

维护下凸线,然后二分或者单调队列#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>using namespace std;typedef long long LL;const int max...

2018-10-11 15:38:16 185

原创 HDU - 5955 Guessing the Dice Roll——ac自动机+概率dp+高斯消元

要写的就是代码中的solve函数,看一下就明白了,其余的都是模板,挺水的#include <bits/stdc++.h>using namespace std;const int maxn = 105;int T, N, L, data[maxn], id[maxn];double a[maxn][maxn], b[maxn];void Gauss(int num) {...

2018-10-09 12:11:57 209

原创 HDU - 5956 The Elder——斜率优化dp

状态转移方程很好想写出来发现是经典的斜率优化由于状态本质上是在树链上转移, 所以回溯的时候要撤销状态分析了一下单调队列可能不太好做,所以直接二分了#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<int, int> PA;const int m...

2018-10-08 18:41:59 257

原创 HDU 5952 Counting Cliques——剪枝

剪就完事了#include <bits/stdc++.h>using namespace std;const int maxn = 110;int T, n, m, s, ans;vector<int> G[maxn];int mp[maxn][maxn], temp[maxn];void dfs(int u, int sz) { if (sz =...

2018-10-08 16:52:48 178

原创 Gym - 101550E Exponial——欧拉降幂

a^b%c = a^(phi(c)+b%phi(c))%c1e9看似吓人,其实中间模数为1时可以直接返回0,算是个强剪枝#include <bits/stdc++.h>using namespace std;typedef long long LL;LL pow(LL x, LL y, LL mod) { LL ans = 1; while (y) {...

2018-10-08 16:17:58 428

原创 Gym - 101350G Snake Rana——容斥

容斥裸题#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1e4 + 10;const int INF = 0x3f3f3f3f;int T, n, m, k;...

2018-10-08 11:34:32 220

原创 Gym - 101550C Card Hand Sorting——思维

开始读错题意了,题目要求的是相同花色之间有序,知道这一点以后就枚举一下序列跑几个LCS就好了#include <bits/stdc++.h>using namespace std;const int maxn = 100;char str[maxn];int n, cnt[4], a[4][maxn];struct Node { int val, type;}...

2018-10-08 11:33:31 230

原创 Gym - 101550D Daydreaming Stockbroker——贪心

一个简单的小贪心,被队友坑着写了一发dp,emm。。。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 1000;int N;LL a[maxn];int main() { scanf("%d", &N); for (int i =...

2018-10-08 10:07:46 204

原创 HDU 3507 Print Article——斜率优化dp

首先不难推出这道题的状态转移方程:dp[i]=min{dp[j]+(sum[i]-sum[j])^2|0<j<i}假设有k<j,j比k更优当且仅当dp[j]+(sum[i]-sum[j])^2<=dp[k]+(sum[i]-sum[k])^2化简得:dp[j]-dp[k]+sum[j]^2-sum[k]^2<=2*sum[i]*(sum[j]-sum[k])...

2018-10-06 18:12:27 167

原创 CodeForces - 787D Legacy——线段树优化建图

建两棵线段树,一棵表示入区间,一棵表示出区间入区间每个父亲和儿子连边,权值为0,出区间每个儿子和父亲连边,权值为0,入区间和相应的出区间连边,权值为0每次查询新建两个点,这里设为q1,q2,并假设要连边的两个区间为【l1,r1】,【l2,r2】(题目中为有向边),那么其实是【l1,r1】的出区间连q1,边权为0, q1连q2,边权为输入的边权,q2连【l2,r2】的入边,边权为0,和区间连...

2018-10-05 20:35:33 509

Qt游戏编程——飞机大战

游戏模板,大家可以随意添加自己的元素

2017-07-06

空空如也

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

TA关注的人

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