自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hychychyc

666

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

原创 一些鬼题(day2上)

t1 dp从矮的跳向高的价值一定最小 然后排序,dp dp[i][j],跳了i个楼,前一个楼是j 枚举前一个楼 枚举跳到那个楼,转移一下 找小于的t的#include<cstdio>#include<iostream>#include<cmath>#include<ctime>#include<algorithm>#include<cstdlib>using namespac

2017-10-30 17:35:17 363

原创 一些sb题(day1下)

t1 有两副牌,每副牌都有n张。 对于第一副牌的每张牌长和宽分别是xi和yi。对于第二副牌的每张牌长和宽分别是aj和bj。第一副牌的第i张牌能覆盖第二副牌的第j张牌当且仅当xi>=aj并且yi>=bj。(注意牌不能翻转)当然一张牌只能去覆盖最多一张牌,而不能覆盖好多张。 LYK想让两副牌的各n张一一对应叠起来。它想知道第二副牌最多有几张能被第一副牌所覆盖。这个题用贪心 对两副牌各自进行排序,

2017-10-30 17:10:58 443

原创 考前集训(day1上)

t1 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数。 现在给定一个数P,LYK想要知道这个数是不是立方数。 当然你有可能随机输出一些莫名其妙的东西来骗分,因此LYK有T次询问~离线做,模拟一下,极端数据0.015秒,也可以预处理用map搞一下,最极端数据0.6秒,不会超时#include<cstdio>#i

2017-10-29 11:39:00 184

原创 再一次测试

t1#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath> #define ll long longchar a[199999];int main(){ freopen("nigeru.in","r",stdin); freopen("nigeru.out"

2017-10-28 14:43:32 305

原创 洛谷10月月赛R2·浴谷八连测R3 P3933 Chtholly Nota Seniorious

这个题可以用二分,然后贪心 其实一开始也有想到,不过不知道怎么贪,看了题解恍然大悟 当最大值再四个角的区域是不同的,所以要从四个角开始找,然后是成阶梯状的,下一层一定小于等于上一层,如果最大值在这个区域,最大指减每一个都要比答案小,同理最小值在某个区域,每个值减最小值都所比答案小,然后检验另一个区域就行了,所以一行行的贪就可以#include<cstdio>#include<iostream

2017-10-28 08:17:19 323

原创 洛谷10月月赛R2·浴谷八连测R3 -Chtholly-P3932 浮游大陆的68号岛

预处理处1~i全搬到1的前缀和 l-r全搬到1就是两个的减 如果在前面 就不用搬到一,减去多搬得是前面的相乘 在后面 就先搬到一 再搬到q前去多搬得 在中间的就转化为两个区间#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath> const int M=192608

2017-10-27 15:50:45 300

原创 饥饿的奶牛

和之前一个尼克的任务一样 f[i+1]=max(f[i],f[i+1]);f[i+1]=max(f[i],f[i+1]); f[a[i][j]+1]=max(f[a[i][j]+1],f[i]+a[i][j]−i+1); f[a[i][j]+1]=max(f[a[i][j]+1],f[i]+a[i][j]-i+1);#include<iostream>#include<cstring>#in

2017-10-27 11:23:22 365

原创 跳舞

if(j(modt))!=0)f[i][j]=max(f[i−1][j−1]+a[i],f[i−1][j]−a[i]);elsef[i][j]=max(f[i−1][j−1]+a[i]+b[i],f[i−1][j]−a[i]); if(j \pmod t)! =0) f[i][j]=max(f[i-1][j-1]+a[i],f[i-1][j]-a[i]); else

2017-10-27 11:21:20 473 1

原创 又一次测试题

循环移动给出一个字符串 S 与 N 个操作。每个操作用三元组(L, R, K)进行描述:操作将字 符串第 L 个到第 R 个位置构成的子串循环移动 K 次。一次循环移动就是将字符 串最后的这个字符移动到第一位,其余的字符顺次后移。例如,对于字符串 abacaba,操作(L=3, R=6, K=1)后得到的字符串即为 abbacaa。 求出在 N 个操作后得到的字符串。这个题模拟就行,第一次交的时候

2017-10-27 10:04:49 298

原创 最大字段和

贪心#include<cstdio>#include<iostream>#include<cstring>#include<vector>#include<algorithm>using namespace std;struct st{ int s,t;}a[1999999];int ans,m,n,k,r,f[1999][1509],w[1999],v[1999],t[19

2017-10-26 16:49:00 236

原创 尼克的任务

f[i]表示i-1以前的空暇时间最大 f[i+t]=max(f[i+t],f[i]) (一个是做这个任务,一个是不做) 先从第一个时间开始做,然后看做哪一个的空暇短 需要付最小值,因为你不能从后面的时间开始,必须前面推到过才行#include<cstdio>#include<iostream>#include<cstring>#include<vector>using namespac

2017-10-26 16:13:06 307

原创 洛谷 P1736 创意吃鱼法

一个简单的dp。 最长线是之前的最长的和前面零的个数的最小值 不过一开始我的min忘写了,编译器竟然不报错。。 尴尬了。。。#include<cstdio>#include<iostream>#include<cstring>using namespace std;int ans,m,n,f[2509][2509],dp[2509][2509],a[2509][2509],h[2509]

2017-10-26 15:40:55 236

原创 多米诺骨牌

f[i][j]表示前i个的差是多少的最小步 f[i][j]=min(f[i−1][j+a[i]−b[i]],f[i−1][j−a[i]+b[i]]);f[i][j]=min (f[i-1][j+a[i]-b[i]],f[i-1][j-a[i]+b[i]]); 递推过去,最后求最小差#include<cstdio>#include<iostream>#include<cstring>usin

2017-10-26 14:40:13 358

原创 dp水题

很多背包题

2017-10-26 11:40:08 213

原创 测试 3

chess 简单的搜索题,递归模拟,没啥优化剪枝。。。 不知怎么搞的’,’忘加了。。 然后走一步的特判在程序里错了,弄出去就对了。。。#include<cstdio>#include<iostream>using namespace std;struct st{ int maxn,cnt; };int a[11][11],b[11][11];int xx[]={1,1,-1

2017-10-25 15:07:16 246

原创 清北测试二

t1 正解是贪心,二分答案也能过。 用优先队列,维护最大值 O#include<cstdio>#include<iostream>#include<cstring>#include<queue>#include<algorithm>using namespace std;int n,w[5100];priority_queue<int> q;int check(int x){

2017-10-25 10:41:41 161

原创 清北测试二

t1 正解是贪心,二分答案也能过。 用优先队列,维护最大值 O(nlognlogn)#include<cstdio>#include<iostream>#include<cstring>#include<queue>#include<algorithm>using namespace std;int n,w[5100];priority_queue<int> q;int chec

2017-10-24 17:48:41 267

原创 清北测试

t1简单的模拟,忘了k==1&&n==1的情况。。。#include<cstdio>using namespace std;int n,k;int main(){ //freopen("str.in","r",stdin); //freopen("str.out","w",stdout); scanf("%d%d",&n,&k); if(k>n){

2017-10-24 11:40:47 251

原创 2016noip提高组day1 换教室

做这个题要先搞懂期望。。。 我还是不懂什么是期望。。。 但好像这个题的期望是距离乘概率。。。 所以这就是个期望dp f[i][j][0,1] 表示到i时间段,选了j个教室,选不选当前的教室 所以 有四种情况,前面选后面不选,前面选后面选,前面不选后面选,前面不选后面不选 方程就是f[i][j][0]=min(f[i-1][j][0]+dis[c[i-1]][c[i]],f[i-1][j

2017-10-23 17:41:00 332

原创 qbday1

这个题用前缀和模拟,1*1,2*2,3*3,4*4,5*5-2*1 ,3*2, 4*3 ,5*4 ,6*5 你会发现少了个1-4的和,多了个5*6 所以维护前缀和就行了 #include<cstdio>#include<iostream>using namespace std;int s[1100000],n,k,a[1199999];long long ans,tot;int ma

2017-10-23 11:13:39 290

原创 运输计划

这个题和疫情控制差不多,但那个题更恶心。 先二分答案,找需要减少的边,看他们有没有一条边是一样的 如果没有的话,肯定不行,如果有的话,看删掉最大的能不能让所有的路大于答案 树上的最短边就是到公共祖先的距离,这里用tarjan求得,也可以用倍增,不会的话看前面的博客 找一条边经过多少次用差分 把两个节点+一就代表这两个叉上的点都走过一遍,可是祖先上面的点没有走,所以把祖先-2,求树的后缀和就

2017-10-23 11:03:59 689

原创 疫情控制

#include<cstdio>#include<cstring> #include<iostream>#include<algorithm>#define ll long longusing namespace std;const int M=51000;struct st{ ll rest,id;}; st a[M],b[M];ll vis[M],used[M],de

2017-10-22 16:56:38 2168

原创 愤怒的小鸟

一道状压dp题 把猪压缩为二进制,1代表能打死,0代表不能 然后预处理出任意两个猪组成的曲线,能打死那些猪,然后转移时或一下就行了 dp[i|bit[i][j]]=min dp[i]+1; 一个猪的预处理。#include<cstdio>#include<cstring> #include<iostream>#include<cmath>using namespace std;in

2017-10-22 09:56:27 321

原创 加分二叉树

想不到dp,写了个暴力,用记忆化搜索优化a了 枚举一个根,求出子树的最大值,记录下来,一点点向下 输出序列就记录下每个区间最大值的根,从他向下分,输出#include<cstdio>#include<iostream>using namespace std;int n,a[19999],toto,ans2[199999],dep[1999][1999],dp[1999][1999];in

2017-10-20 15:46:12 196

原创 飞扬的小鸟

dp 70%的方程很好想,100%的你可以先跳一次,再把上一次要跳的弄到后面去挑,因为这样你要先枚举矮的,从矮的向高处跳,而且这样你就可以从前一个的没管的位置向这跳,所以你要枚举这一个和前一个下管子的最小到上管子最大,才不会漏,而且你不能掉下来再跳,所以两个不能一块转移,最后掉,还有跳到m的,和上面一样的想法#include<cstdio>#include<iostream>#includ

2017-10-20 11:28:34 663

原创 子串

f是指选i这一位,sum是不选 然后选着一位的就等于选上一位地加上不选上一位的,选上一位的可以分为两种,独立成块的和不独立的 不选的就是之前所有的方案 然后把第一位滚动一下就行了#include<cstdio>#include<iostream>#include<cstring>using namespace std;int f[2][1999][1999],sum[2][1999][

2017-10-20 08:30:25 166

原创 选择客栈

这个题可以枚举一个客栈,然后找后面第一个小于p的客栈 那么这个客栈可以和后面的任何客栈组合,可以先记下后缀和 然后第一个小于p的客栈可以用倍增找时间复杂度为o(nlogn)或O(nk),后来我才发现这不是#include<cstdio>#include<iostream>#include<cstring>using namespace std;int n,k,p,f[219999],x[

2017-10-19 17:38:49 349

原创 Vigenère 密码

模拟,这是密文,找明文#include<cstdio>#include<iostream>#include<cstring>using namespace std;char a[110],b[1100];int main(){//printf("%d %d",'a','A'); gets(a); gets(b); int lena=strlen(a); int

2017-10-19 17:13:45 235

原创 国王游戏

高精#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;#define ll long longstruct st{ ll s; ll x,w;}a[199999];ll n,tot,w,t;int s[199999],p[199999],a

2017-10-19 17:11:48 207

原创 寻找道路

因为这个题是有向图,所以联通的条件是,正反都能跑,所以反着跑一边bfs,把没跑到的打上标记,然后正着跑spfa 因为第一次我去了好几层。wa了#include<cstdio>#include<queue>#include<cstring>using namespace std;queue<int>q;const int M=21000,N=410000,INF=2139062143;i

2017-10-19 08:05:06 237

原创 解方程

0%任何数都是零 可以用模的周期性,f(x)%k是零,f(x+k)%k也是零,很显然,那么你就模三个质数,像哈希一样 然后推出之后的数#include<cstdio>#include<queue>#include<cstring>using namespace std;#define ll long longconst int M=11000;int n,m;ll f[100000]

2017-10-19 07:57:37 258

原创 联合权值

考虑一下,对于一个中节点,他的联合全职是所有临界点自由组合的和,也就是a*b+b*c+….. 这个值与a+b+c+。。。。有什么关系呢 2*a*b+2*b*c=(a+b+c+…)^2-a*a+b*b+c*c…… 而最大的,是最大值与次大值的组合 所以预处理处所有临界点的和,平方和,最大值次大值就行了O(n)复杂度#include<cstdio>#include<algorithm>#in

2017-10-18 14:51:27 198

原创 noip2013

day1 t1 转圈游戏(circle) 裸地快速幂。。#include<cstdio>using namespace std;int n,m,x,k;int fastpow(int a,int k){ int ans=1; while(k){ if(k&1) ans=(1ll*ans*a)%n; a=(1ll*a*a)%n;

2017-10-18 14:46:09 416

原创 codevs 2370小机房的树

先找到他们的最近公共祖先,记下他们的深度(就是花费) 最后的最小花费就是询问的减祖先加起来#include<cstdio>#include<iostream>using namespace std;const int M=1001009;int n,m,s,f[M],vis[M],lca[M*2];int nex[M*2],head[M*2],to[M*2],tot,heade[M*2],

2017-10-16 16:19:08 282

原创 dfs(tarjan)求lca

离线做法,可以做到o(n) 对于每一棵树,向下搜索,变成小树,如果子节点没有子节点了,就返回 然后在每一步中,找有x的查询,如果另一个访问过,就是他们的祖先 不同颜色的就是不同的子树 #include<cstdio>#include<iostream>using namespace std;const int M=1001009;int n,m,s,f[M],vis[M],lca[M

2017-10-16 15:58:52 258

原创 洛谷月赛八连测 SAC E#1 - 一道大水题 Knight

一开始一直re。。。。 原来是tot,cnt忘付出值为零了。。。。 跳了一上午。。 这个题就是一个包搜 因为只有16个旗子。 但白骑士,与黑骑士和国王不用记,因为你吃不掉黑骑士,国王你只要吃掉就赢了 所以将所有状态用二进制记录下来,有1<<13(2^13) 种,预处理出他们能走于不能走的地方 然后bfs从一个状态到另一个状态。#include<cstdio>#include<cstd

2017-10-16 14:53:11 585 1

原创 洛谷10月月赛R1·浴谷八连测R1·提高组:SAC E#1 - 一道简单题 Sequence2

100 分建八棵树状数组。 维护前面的最大值。。#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int dp[5][100009],n;int a[5][100009],c[10][400009],t[400009],tot,ans,t1;void up(int k,int x,int v

2017-10-15 17:05:17 300

原创 洛谷10月月赛R1·浴谷八连测R1·提高组 一道中档题 Factorial

我们考虑,0是由进位造成的,而只有乘起来正好进位才行,所以我们想到把k分解质因数,统计出个数,除一下,找最小的 比如 40是2,2,2,5解释说三个二一个五组成零 因为n很大,n的阶乘分解质因数有小学奥数公式 while(tmp>=q){ toto+=tmp/q; q=q*s[i]; } 而这个题要分解大数的质因数,可以用

2017-10-15 10:31:50 256

原创 sum(欧拉函数之和)

已知∑d|nφ(d)=n\sum_{d|n} φ(d)=n 证明:设S(n)=∑ni=1φ(i)证明:设 S(n)=\sum_{i=1}^{n} φ(i) 因为∑d|nφ(d)=n\sum_{d|n} φ(d)=n ∑ni=1∑d|iφ(d)=n∗(n+1)/2\sum_{i=1}^{n} \sum_{d|i} φ(d)=n*(n+1)/2 ∑ni=1∑d|iφ(d)=∑ni=1∑⌊n/d⌋

2017-10-08 11:24:54 303

原创 arc(逆欧拉函数)

由phi(n)=n*(1-1/p1)(1-1/p2)…(1-1/pt) 得n=p1*p2*…pt*(phi(n)/ (p1-1)(p2-1)*…(pt-1)) 枚举质数,把phi(n)除完,把括号里的搞成1,最后的n就等于质数相乘。。。。 二需要特判,你可以除无限二,前面也可以乘无限二 但标程不对,没分解*2的,所以我把return挪后了 40 5 41 55 75 88 100错的

2017-10-08 09:06:23 475

空空如也

空空如也

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

TA关注的人

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