自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hjx

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

原创 对拍

有时候我们对于一个题先写了不确定的貌似是正解的程序,然后又写了保证正确的暴力。 那么我们怎样来确定我们想的正解对不对呢?对拍。 对拍我们需要这样几个文件: data是数据生成器,right是暴力,test是待定正确程序。 举一个a+b的例子,里面是这样写的。data.cpp#include<iostream>#include<cstdio>#include<ctime>#include

2017-08-12 09:09:02 255

原创 矩阵价值和

60分的做法:O(n^2) 处理出矩阵的前缀和,那么就可以O(1)地查询任意矩阵的大小,O(n^4)枚举所有矩阵,求出答案。100分的做法: 对于1号点和2号点,它们两个结合是对答案的贡献是: 2∗a[i1][j1]∗a[i2][j2]−−−①2*a[i1][j1]*a[i2][j2]---① ++ a[i1][j1]2+a[i2][j2]2−−−②a[i1][j1]^2+a[i2][j2]

2017-08-25 08:26:36 702

原创 排列组合问题

这数据写个暴力都拿不了30分 T_T。 C(n,i)*C(n,i)=C(n,i)*C(n,n-i) => 结合现实意义,在n个里面选 i 个,再在n个里面选n-i个的方案数。 就等价于在前n个中选 i 个,在后n各种选n-i个。而且i = 0~n => 在2*n各种选n个。 那么=C(2*n,n);答案要对1000000007取模, C(2∗n,n)modp=(2∗n)!∗(n!∗n!)x

2017-08-23 17:21:28 313

原创 石子合并加强版

数据范围 对于 20%的数据,n=5 对于 60%的数据,n<=80 对于 100%的数据,n<=40060分的做法:与石子合并一样,枚举起点,终点,第一个断点,第二个断点。时间复杂度O(n^4)。100分做法: 用另一个数组f2[i][j]来优化,f2[][]是合并两堆最小(不过要用f[][]来更新),就可以降到O(n^4)。#include<iostream>#include<cstr

2017-08-23 11:30:19 390

原创 P1042 乒乓球

luogu 传送门 注意: 真正的规则:达到11或21分后,要等到两人分值差>=2时才算完成一局。#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<cstdio>using namespace std;char c,a[100001];int

2017-08-23 07:57:27 1004

原创 Dinner 点餐

二分答案。 关键在于check()的写法。20分的写法: check(x) 中O(n*n)的写法:直接枚举起点,一直往后加,一旦>x,就加一张菜单,如此枚举。60分的写法: 二分加二分。用一个前缀和来优化。 check(x)中枚举起点s,设当前这一张菜单的起点为L,那么下一个起点就是sum[L]+x的前驱,可以用upper_bound()来找,然后再把找出来的那个位置减 1 ,就是下一个起点

2017-08-22 18:01:06 297

原创 count

这题的解法好巧妙。 我们可以通过dfs来处理一个 f 数组。f[i]表示以i为根的子树有多少个节点。 那么当我们从1到n枚举每个块的大小时(n%i==0),然后扫一遍 f 数组,f[]为 i 的倍数的个数如果等于n/i,那么就是一种成功的方案。#include<iostream>#include<cstring>#include<cstdio>#define LL long long#d

2017-08-22 16:22:29 232

原创 abcd ---多重背包

【数据规模与约定】 对于 20%的数据,N≤10,-2≤a[i]< b[i]≤2; 对于 60%的数据,N≤50, -20≤a[i]< b[i]≤20; 对于 100%的数据, N≤200,-25≤a[i]< b[i]≤25,1≤c[i]≤20,0≤d[i] ≤10000 · · · · 解法: 我一开始拿到这个题是很懵的。 · 原来是一个背包! 我们设A=Σe[i]*c[

2017-08-22 14:54:30 231

原创 dwarf tower

【问题描述】Vasya在玩一个叫做”Dwarf Tower”的游戏,这个游戏中有n个不同的物品, 它们的编号为1到n。现在Vasya想得到编号为1的物品。 获得一个物品有两种方式:直接购买该物品,第i件物品花费的钱为ci用两件其他物品合成所需的物品,一共有m种合成方式。请帮助Vasya用最少的钱获得编号为1的物品。【输入格式】 第一行有两个整数n,m(1<=n<=10000,0<=m<=

2017-08-22 11:07:51 234

原创 K`th number

二分答案,check()用two point写#include<iostream>#include<cstdio>#include<algorithm>#define LL long long#define N 200009using namespace std;int n,m;LL k;LL a[N],b[N],num,L,R,mid;bool flag;inline int

2017-08-22 10:59:28 221

原创 保留道路

50%的做法: 先按照s升序排序。 从小到大枚举maxg,把g小于maxg的边全部选出来,(因为前面已经排过序了),造一棵最小生成树,更新答案。时间复杂度≈O(m*m)。 100分的做法: 按照g升序排序。 维护一个n-1条边的边集,是上一个建造的最小生成树的边集。 从前往后枚举maxg,把这条边按照s用插入排序插入到当前n-1条边的集合中。 在这样的n条边的集合中建造一颗最小生成树,

2017-08-21 17:52:17 513

原创 列车调度 manage

问题描述 有N辆列车,标记为1,2,3,…,N。它们按照一定的次序进站,站台共有K个轨道,轨道遵从先进先出的原则。列车进入站台内的轨道后可以等待任意时间后出站,且所有列车不可后退。现在要使出站的顺序变为N,N-1,N-2,…,1,询问K的最小值是多少。对于30%的数据,N≤10; 对于70%的数据,N≤2000; 对于100%的数据,N≤100000。模拟一下这个过程,我们可以发现,要满足题目

2017-08-21 11:22:16 268

原创 trokuti 三角形

问题描述 平面上有N条直线,用方程Aix + Biy +Ci =0表示。这些直线没有三线共点的。现在要你计算出用这些直线可以构造出多少三角形?输入格式 第1行:一个整数N(1 ≤ N≤ 300000)。 下面N行:每行3个整数:Ai, Bi 和Ci,表示对应直线方程的系数。不超过10^9。输出格式 一行,一个整数。 数据规模与约定 对于40%的数据,N ≤1000; 对于100

2017-08-21 11:15:10 566

原创 捡金币

time:3s 难度:Day2 T3 长长的题面 这是一道好难的题。 正解是DP+单调队列。(蒟蒻不会啦,看了题解也迷迷糊糊) 我只写了一个裸的DP,期望值60分,意外惊喜地拿了80分,好开心。 我们枚举时间,f[t][i][j][k]表示第t秒站在(i,j),已经用了k次闪现所获得的最大金币数 转移方程见代码,还是比较容易理解的。(对于 t 我是从零开始存的)#inclu

2017-08-20 17:11:30 520

原创 传球接力

50%的做法:枚举每一个点,一直走到尽头,记录长度,更新答案。像这样的有n条边,n个点,每个点都有一条出边的点一定存在环。这样的图叫做 环加外向树。那么对于这道题的满分做法,先求出每颗树的叶子到树根的最长路径记为f[i],再找出环,然后每次枚举环上的点x,(环的长度len),用len-d[x]+f[to[x]]来更新答案就可以了。 求环的时候,有很多种方法,然而用dfs是超时的。 我们可以先求f

2017-08-20 15:21:44 542

原创 业务办理

仔细分析,发现要使最大不满意度最小,排队顺序应该是按照最长等待时间来排。 如果不是这样,交换任意两个人的位置,那么这两个人等待时间的最大值一定比原来大。 所以这样排的正确性显然。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define LL long long#define M 10000

2017-08-20 15:03:49 355 1

原创 P2077 红绿灯

luogu 传送门 我们只要判断到路口时是不是绿灯,如果是绿灯就可以直接输出,否则加上等待时间。 判断时,取模就好啦。#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>using namespace std;int n,m,a[10

2017-08-19 11:19:26 488

原创 【UR #4】元旦激光炮

uoj 传送门 第一次做交互题,大概明白了是啥意思,就是写一个函数,帮助实现一个操作。 题目中有要求,调用题目中给出的可以用的函数次数越少越好,这就是优化所在。 这道题就是在三个升序数组中找所有数的第K大,我们要尽量少用题目中已给出的函数。 我们每次现在三个数组中找出第k/3大,k-=k/3,那把找出的数的所在数组的前面的数删掉,这样下去,直到k为0就好啦。这样调用的次数肯定很少,就可以拿到

2017-08-19 10:08:45 613

原创 P1939 【模板】矩阵加速(数列)

luogu 传送门 矩阵乘法快速幂,注意记录过程量; 还有就是如果前面已经算过了,直接赋值就好了。#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring> #define LL long long#define MOD 1000000007using namespac

2017-08-19 09:36:01 377

原创 #82. 【UR #7】水题生成器

uoj 传送门这是uoj上的题解先写了一个45分的dfs#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define LL long longusing namespace std;LL n,m,ans[50],P=1;void dfs(int x,LL sum

2017-08-19 08:56:20 318

原创 度度熊与邪恶大魔王

HDU 传送门 这是一道变形的完全背包。 我们用dp[i][j]表示打倒血量为i防御力为j的恶魔的最小花费。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define LL long long#define INF 0x3f3f3f3fusing names

2017-08-18 16:54:29 287

原创 HDU 6114 Chess

HDU 传送门 很显然,组合数。 输出C(n,m)就可以了。 因为询问比较多,所以用杨辉三角就可以了。#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<cmath>#define LL long long#define MOD 1000000007using namespace s

2017-08-18 10:58:23 254

原创 #113. 【UER #2】手机的生产

uoj 传送门 蒟蒻做这个题是一懵一懵的啊。题意就好难懂! 我们以 || 为分界线,分成若干块。因为在每一小块中有0这一块的返回值就是0,在整个表达式中有某一块的返回值为1,那整个式子就是1,剩下的块都不用算了。 只有当手机返回值为1时才能造出手机。而且在当前这块中复制出的手机,在下一块中才能造出其他的手机。#include<iostream>#include<cstdio>#includ

2017-08-18 10:10:26 332

原创 uoj 118 赴京赶考

uoj 传送门 列与行之间单独处理。 对于列之间,我们判断dis只需要看b数组就可以了。 同理对于行只看a数组就可以了。#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<vector>#include<algorithm> #include<queue>#define N 200

2017-08-17 21:24:35 268

原创 戏game

按照正解的做法,我只得了80。首先我们要明确这是一张竞赛图。 然后有一个点,在竞赛涂上如果存在环,那么就一定有三元的环。解释如下解释如下 观察一下图,看一下代码。嘻嘻 shipinjiangjie#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<vector>#include<alg

2017-08-17 20:51:33 237

原创 序sort

分析一下我们需要找一个最大的集合,使得集合内的任一成员相互之间没有发生过争吵。 我们知道,两个人没有发生过争吵的条件是小的在前,大的在后。那么一列人不会发生争吵的条件是这是一个上升子序列。 那么题目就是要求我们用nlogn的方法求最长的上升子序列(板子题嘛)。 对于nlogn求上升子序列的算法解释与分析见我的另一篇博客导弹的拦截#include<iostream>#include<cstdi

2017-08-17 20:34:01 157

原创 迷enc

len<=1000.songfen题吗? 需要注意的问题:如果确定了25个,那么第26个也能够确定了。#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<map>using namespace std;char s[1009],m[1009],a[1009];//密文,明文,解密 in

2017-08-17 20:26:27 166

原创 小小粉丝度度熊

HDU 传送门 开始肯定是先将区间按照 l 然后 r 升序排序。 我的做法:再合并一下区间(能合并的就合并)。 我一开始想了一种可能会超时的做法,我枚举x区间,计算从第x个区间后面的间隙开始补签,一直更新最大值,貌似真的会超时。然后我又想了用前缀和来优化一下,应该会过的。然后我获悉了一种使用队列的方法,可以做到O(n)。 我们在后面插入下一个区间时: 如果补签数m>=空隙,那么就可以入队,

2017-08-17 18:01:18 226

原创 P1613 跑路

luogu 传送门倍增吗? 我们定义 f[k][i][j] 表示从点 i 到点 j 能否通过跳2^k(1秒)直接跳到,跳到为1,否则为0; 那么就有如果 f[k-1][i][j]&&f[k-1][i][j] 则f[k][i][j]=1; (想一想就是啊)如果可以一步跳到的,dis[i][j]设为1,其余为大值,跑一边O(n^3)的floyed也可以过啦。注意dis不可设为127,会爆的!#

2017-08-16 20:17:46 260

原创 P3819 松江1843路

luogu 传送门介绍一下我的做法: 对房子按照坐标排序,对每一个房子,记一下前缀和后缀和(前面/后面房子中的人到当前房子的路程和), 最后扫一遍取前缀和和后缀和的和的min就可以了。但是好像跟样例解释不太一样啊。#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring>

2017-08-16 19:10:47 282

原创 P1349 广义斐波那契数列

luogu 传送门 我们可以设一个矩阵A={p , 1                                          q , 0}ans矩阵{a2 , a1},用ans矩阵*A矩阵的n-2次方,ans[1][1]就是答案了。 正确性自己在纸上画一画就显而易见了。#include<iostream>#include<cstdio>#include<algorithm>

2017-08-16 17:12:11 344

原创 P3390 【模板】矩阵快速幂

luogu 传送门 矩阵乘法的法则 矩阵乘法的法则#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring> #define LL long long#define MOD 1000000007using namespace std;LL a[109][109],an

2017-08-16 16:09:00 255

原创 【NOI2016】优秀的拆分(95分)

uoj 传送门题目大意:给出一串字符串,求它的子串中形如AABB的方案个数。90% len<=2000 ,O(n^2) 的做法可以过。 100% len<=30000, 蒟蒻不会啦。O(n^2)的做法: 枚举中间点,求出两边形如AA的个数,相乘加入答案中。#include<iostream>#include<cstdio>#include<algorithm>#include<string

2017-08-16 10:46:49 551

原创 P3370 【模板】字符串哈希

luogu 传送门直接上板子#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring> #define LL long long#define MOD1 1000000007#define MOD2 1000000009#define seed1 163#define

2017-08-16 09:13:05 263

原创 小Y的问题

30分做法:n^4枚举边. 100分做法: 枚举每一条边,设两个端点为x,y; 我们通过组合公式来计算 Y 的个数,每一次加上C(num[x]-1)*(num[y]-1); 通过记连接一个点的边的最大值,次大值,第三大值。 加上除去枚举的边外x连接的最大的两条边,以及y连接的除去… 之后最大的边。 然后再将x和y换过来,重复一遍。重复上述操作。#include<cstdio>#incl

2017-08-15 21:19:12 516

原创 铺瓷砖

问题的实质是要我们求两个分数的最小公倍数。 首先,我们要知道,整数a和b的最小公倍数是a*b/gcd(a,b); 那么怎样来求分数的最小公倍数呢? 我们可以先将两个分数通分,分母变为t1,然后再求分子的最小公倍数t2。 那么答案就是t2/t1, 注:最后要约分.#include<cstdio>#include<iostream>#include<cmath>#include<cstri

2017-08-15 20:32:06 582

原创 P3818 小A和uim之大逃离 II

luogu 传送门bfs拓展嘛。 不过这里有一点特别之处,就是记录状态时要三维,f[i][j][0/1],代表到了(i , j)这个点是否使用过向量。 在bfs中往四面走,如果没有使用过向量,就再拓展一下使用向量的。(还是比较容易啦)#include<cstdio>#include<iostream>#include<cmath>#include<cstring>#include<alg

2017-08-15 14:21:25 346

原创 P3817 小A的糖果

luogu 传送门挺好想的贪心(蒟蒻一下就想到啦)。 我们从前往后处理时,尽量吃后面的糖,因为后面的糖会对后面产生影响,而前面的就不会影响了。 不过要开long long 为此,我wa了两个点。#include<cstdio>#include<iostream>#include<cmath>#include<cstring>#include<algorithm>#define LL l

2017-08-15 10:55:58 225

原创 P1979 [NOIP]华容道

luogu 传送门 搞了小半天,终于搞了出来。 以前写过一个暴力70分的做法(点这里)在70分的基础上: 注意到只有空格在指定棋子旁边才有意义,所以可以O(n^2)记录状态,记录空格在指定棋子的哪个方向。 因为询问数比较多,所以可以预处理出来【指定棋子不动,空格移动到另一边】和【棋子与空格交换位置】两种情况,以移动步数为边权,以状态为点建图。 代码中有解释#include<cstdio

2017-08-11 20:08:43 593

原创 P2345 奶牛集会/P2657 低头一族

luogu 传送门 双倍经验! 树状数组题 v[i]只有当和比它小的v[j]一起运算时才对答案有贡献。 我们可以这样来处理,离线来做。将所有奶牛按照v升序排序,然后一个奶牛一个奶牛的查询,再插入。 我们要树状数组来维护一个数组cnt[i],和sum[i]表示i-lowbit(i) ~ i范围内数的个数和这些数的和。 我们查询时,记num1为前i-1头奶牛中小于x[i]的头数,nu

2017-08-11 15:36:53 309

空空如也

空空如也

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

TA关注的人

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