自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

曹讽

接触ACM的第一年

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

原创 Shopping Offers POJ - 1170(背包)

Shopping Offers POJ - 1170 题意:先输入b;表示一共有b个商品;接下来b行,个三个数c,k,p;代表商品的名称,需买的商品数,单个商品的价格; 然后输入s,代表有s种优惠;接下来s行,先一个数n,代表n个商品,然后n个(c,k)对,代表c的商品买k件,最后输入price,代表此类优惠的价格;因为最多五种商品,数据不大,就可以6个循环(五种商品加优惠方案)枚举每种情况暴

2017-09-21 13:19:10 320

原创 Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)

A. Fraction题意:给出分子分母之和,求出最大的真分数; n/2作为分母分子,暴力gcd判断,如果互质就输出;#include<bits/stdc++.h>using namespace std;int gcd(int a,int b){ if(a%b==0) return b; return gcd(b,a%b);}int main(){

2017-09-12 15:54:31 270

原创 Number String HDU - 4055 递推

题意:由数字1到n组成的所有排列中,问满足题目所给的n-1个字符的排列有多少个,如果第i字符是‘I’表示排列中的第i-1个数是小于第i个数的。如果是‘D’,则反之。 思路:因为是递推题,我就直接想到了dp[i][j]代表第i位填了j的情况数;接下来就是分类讨论; 若str[i]!=’D’;即是递增的,所以第i-1位可以是1~j-1;dp[i][j]=dp[i-1][1]+~+dp[i-1][j-

2017-08-23 16:10:16 240

原创 Ch’s gift HDU - 6162 LCA

看完题一开始想用floyd做,然后看到数据范围瞬间懵逼; 然后想到用LCA,开始现学,然后发现比赛结束了; 官方题解说用树链。。。还是懵逼; 直到看到http://blog.youkuaiyun.com/wjw1340/article/details/77484391;的思路 woc怎么那么水; 题意:给你一棵树,每个节点都有一定值;然后m个询问,问从u节点到v节点的最短路上满足条件的值的和; 思路

2017-08-23 14:22:37 414

原创 Two strings HDU - 6170 递推

和之前的一道cf很像,但明显难了很多; 麻瓜的我模仿之前那道一直在模拟,没想到还可以递推,亏我最近还在做什么递推练习TT; 题意:给出原串与匹配串,问能否匹配原串中所有的字符。’.’可以匹配所有字符,‘*’是给前一个字符附加一个buff,使其可以变成0~无穷个同样的字符; 思路:bool dp[i][j]代表str2前i个字符能否和str1前j个字符匹配(因为我们是用1去匹配2嘛,所以把2做i

2017-08-23 14:05:55 234

原创 hdu 4489 The King’s Ups and Downs

看到n<=20我就想暴力打表找出所有情况了;但死在第15组,要花的时间太久了; 然后就想着推嘛;每次加入一个当前情况最大的数;合理的位置就是高低高低高;所以要找前面高低的情况n,后面低高的情况m;那总情况就是n*m; 所以就是求n,m还有选择前面数的方法数C【i-1】【j】一共i个数,将i放在j位置上 组合数可以打表,n,m就递推来求; dp【i】【0】表示i个数高低的情况;dp【i】【1】

2017-08-21 16:22:34 421

原创 hdu 4747 Mex 递推计数

想用线段树,但又想着是递推专题的,就忍者去想递推; 参考:http://www.2cto.com/kf/201309/245364.html 首先要明白,以i结束的所有区间的值的和记为f[i]肯定不超过以i+1结束的所有区间的值的和记为f[i+1]。所以可以根据f[i]间接推出f[i+1],记第i个数为sa[i],显然只用考虑大于等于sa[i]的数j对f[i]=f[i-1]+?的影响,。如果j出

2017-08-21 15:18:19 556

原创 zoj 3747 Attack on Titans 带限制条件的计数递推dp

题意:给n个士兵排队,每个士兵三种G、R、P可选,求至少有m个连续G士兵,最多有k个连续R士兵的排列的种数。 一开始被至少m个搞晕了,知道递推也写不出递推式,后来发现可以转化,即至多连续n的情况减去至多连续m-1的情况; 然后就能开开心心找递推关系了;#include<bits/stdc++.h>using namespace std;#define maxn 1000001 #defin

2017-08-21 14:14:34 374

原创 CF 429B B.Working out 四个角递推

题目大意: 一个人从左上走到右下,一个人从左下走到右上,两个人必须有一个点作为见面点,见面点的权值不能拿,问按照规则走,取得最大权值的和为多少。 思路: 首先要保证只有一个格子重合,那么只可能是以下两种情况: 1) A向右走,相遇后继续向右走,而B向上走,相遇后继续向上走 2) A向下走,相遇后继续向下走,而B向右走,相遇后继续向右走接着枚举相遇的格子(i,j)即可,考虑四个方向的dp

2017-08-21 13:00:57 619

转载 dp动态规划分类详解

转自:http://blog.youkuaiyun.com/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力、建模抽象能力、灵活度。动态规划(英语:Dynamic programming,DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问

2017-08-20 15:37:49 446

原创 hdu6156 Palindrome Function数位dp

游戏体验很差,比赛之前没怎么接触过数位dp,然后死坑在这里就是不会,然后比赛结束后,去百度了下数位dp,发现。。。这就是一道模板题啊,模板一套稍微改动就过了; 学数位dp可去http://blog.youkuaiyun.com/wust_zzwh/article/details/52100392;题意:求L~R所有的数的l~r进制的f(x,k进制), 如果x是回文串f(x,k进制) = k, 否则等于1;

2017-08-20 15:02:47 821

原创 Multi-University Training 7 1002,5,8,9,10,11

1002 Build a tree HDU - 6121题意:给你一个含有n个节点的k叉树,求所有子树大小的异或和,单独一个节点的子树大小是1; 模拟。。很烦。。和容易超long long和TLE。#include <cstdio>using namespace std;const int N = 1000000;typedef long long LL; LL fast_pow(LL

2017-08-18 13:35:49 235

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

AB除了题目有点恶心难理解外。其他都还简单 C题数据太大,想着直接打表,结果方法不对,一直tle; 调了快一个小时后终于pp; 但结果还是TLE了; 看了D题有点思路,但来不及做了C. Star sky所有星星闪烁有一个长度为c+1的周期,也就意味着如果只考虑星星亮度的话就只有c+1种状态,这样每次查询时只要取ti%(c+1)就能找到对应的状态,其实这道题已经变得很简单了。 打好表后就是O

2017-08-13 13:18:44 195

原创 CF Round #428( Div.2)BCDE

看到昨晚的cf是的主题是权利还是蛮开心的; 但B题好坑; A;题不写了,3min直接pp; B题一开始大模拟,写了150行wa7;然后换一种思路又写了100+行还是wa7 浪费我一个小时; 然后想着去看C; mmp,5min直接暴力pp了; 然后回过头做B;没用模拟去找规律了,然后就pp。。。就得了80分好像,wa了10次;B - Game of the Rows 【思维+贪心】题意就

2017-08-13 12:53:36 314

原创 Number Transformation II CodeForces - 347E

题意:求最小步骤从A到B;每一次操作可-1或者a-a%(xi); 贪心,每次都减去最大的; 然后发现暴力肯定会TLE 所以用set存储x数组,直接去重加排序;然后每次操作之后,选择不合法的删去#include<bits/stdc++.h>using namespace std;#define maxn 111111set<int> st1,st2;int main(){ in

2017-08-12 15:21:37 294

原创 Anton and Tree CodeForces - 734E

题意:给出n个点,n-1条边构成一棵生成树,每个点都有黑白两种颜色,每次改变颜色都能使同颜色的相邻点改变颜色,求最小改变颜色的次数 思路:每次将一个联通块的颜色反转,比较容易想到每次反转后当前这个联通块的区域都会变的更大。 所以我们首先将这棵树进行缩点将相邻的相同颜色的点,缩为一点。缩点之后的树,每个节点都是原来的一个联通快。而将联通块的颜色反转等价于将这个缩点之后的树上的某个节点的全部相连的

2017-08-12 14:03:15 263

原创 Harmony Analysis CodeForces - 610C 【思维】

题意不说了,还算简单; 当时拿到这题的时候就感觉行与行之间可以随便交换。。然后就开始找规律了; 当n=1时; ++ +- 当n=2时;可以改下样例 ++++ +-+- ++– +–+ n=34567; 发现可以通过就n情况向右移复制一次,向下复制一次;左下方向就+变为-,-变为+;复制过去,就能得到n+1; 坑点就是n=0明明不符合题意,以为直接换行就行结果wa了一次; 输

2017-08-12 13:43:48 273

原创 Broken robot CodeForces - 24D 期望dp

题意:n*m的棋盘,一个机器人在(i,j)处,每次等概率地停在原地,向左移动一格,向右移动一格,向下移动一格(不能移出棋盘).求走到最后一行所需期望步数.n<=1000,m<=1000 先讲坑点,1原地停留算一步,2要考虑机器人在同一层楼无限走路,3,m=1情况特殊考虑; 思路:因为是期望dp所以是逆推;从底层推到机器人所在层数; 先最外面套一层关于层数的循环;然后在套一层代表机器人可以在同一

2017-08-12 13:35:43 478

原创 Bad Luck Island CodeForces - 540D 概率dp

题意:会出石头、剪刀、布的人分别有r,s,p个,他们相互碰到的概率相同,输的人死掉,问最终活下去的人是三种类型的概率。 因为是概率不是期望;所以从dp[r][s][p]推到dp[0][0][0];直接暴力三重循环 每一次跟新时的总情况一定是i*j+j*k+k*i; 然后如果剪刀减少一个的概率就是现有的(石头个数剪刀个数/总数)当前情况的概率; 即dp[i][j-1][k]+=dp[i][j]

2017-08-12 13:26:07 275

原创 Misha and Forest CodeForces - 501C

题意:n(2^16)个点组成的森林 给出每个点的度以及相邻点的异或和 求 输出所有边 枚举每一种情况; 如果X的度数为1,则相邻点的异或值就是与X相邻点Y;直接输出; 然后跟新X与Y的度数与它们周围的异或值;然后判断Y点;如Y度数不为1,则返回,继续枚举;#include<bits/stdc++.h>using namespace std;#define ll long long i

2017-08-12 13:13:44 271

原创 Gameia HDU - 6105 多校6

一开始题目看见input里farther,完全没理解,后来看见admin说其实是father,但题目里也没修改,坑。。 还有就是切掉一条边,对节点无影响,只是bob无法将颜色染过去; 然后bob也只能涂空的节点,然后将直接用边连接的节点全变为黑的(一开始以为能涂在白色上) 比赛时莫名wa。。找不到原因,结束后看了数据结果我判断的是k 与 n / 2 的大小,实际上是k 与 n / 2 - 1

2017-08-11 16:30:54 212

原创 Kirinriki HDU - 6103多校6

比赛的时候直接就想到了尺取法,然后tle了。。。; 优化成O(n^2)之后。。又莫名RE; 游戏体验极差; 假设 A 一定在 B 左边,然后考虑A的起点和B的尾部,如果暂时不考虑长度不固定,我们每次查找都让长度尽可能长,那么,我们一定需要将 A的起点和B的尾部,然后获取 A 向右延伸,B 向左延伸对应位置的贡献;可以采用尺取法来进行A的起点和B的尾部向中间的推移,当 此时的dis值大于 m 时

2017-08-11 16:12:03 253

原创 Mindis HDU - 6097多校6

题意就不说了。。一道初中平面几何题。。结果愣是没想到加单方法; 比赛的时候选择三分,但总是TLE,结果题解上写只有优秀的三分才能卡过时间。。mmp 补题的时候就是利用园的反演变化,直接求出答案O(1)的时间; 大致思路就是做出p,q的反演点;p1,q1,如果p1q1连线与园有交点则取交点为d; 如果没有交点就求中垂线; 反演的定义: 已知一圆C,圆心为O,半径为r,如果P与P’在过圆心O

2017-08-11 15:58:31 415

原创 Colorful Graph CodeForces - 246D

题意就是给你一棵树,和树上每个节点的颜色,求节点周围不同颜色的种类的最大值,优先输出序号小的节点; 思路就是用set的大小表示每个节点周围和自己的颜色;枚举一遍就行#include <bits/stdc++.h>using namespace std;#define maxn 100100set<int> st[maxn];int s[maxn];int main(){ int

2017-08-11 15:48:37 260

原创 Limited Permutation HDU - 6044 多校1

第一次接触到输入挂namespace IO //超级读入挂 { const int len=4e7;char buf[len];int sz,p; //4e7大概大小为44M,可以放得下38M的输入 void begin(){p=0;sz=fread(buf,1,le

2017-08-06 15:14:45 299

原创 Hints of sd0061 HDU - 6040 多校1

心情复杂。。。知识积累太少。。没想到能用nth_element; 只要注意:nth_element(a, a + b[i].k, a + b[i + 1].k); 不要选取全部,不然会tle#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using n

2017-08-06 15:09:50 215

原创 Sdjpx Is Happy HDU - 6049 多校2

参考:http://www.cnblogs.com/FxxL/p/7253028.html#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;const int M=3044;int n;int s[M];int f[M]

2017-08-06 14:52:51 251

原创 To my boyfriend HDU - 6052 多校第二场

参考:http://blog.youkuaiyun.com/calabash_boy/article/details/76272704 题意:题意:给出一个n*m(1<=n,m<=100)的矩阵,每个矩阵元素有一个颜色值ai(0<=ai<=10000),现在定义一个子矩阵的value为子矩阵中不同颜色的数量,求子矩阵value的期望。 所有矩阵可以用组合数求C(n,2)*C(m,2); 然后求每种颜色的贡

2017-08-06 14:06:08 302

原创 Time To Get Up HDU - 6077 多校第四场

比赛时打了好久这题。。结果补题的时候发现可以简单好多#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int a[8][25]; int judge(int k) { if(a[0][1+k]&&a[1][0+k]&&

2017-08-05 20:12:51 241

原创 Colorful Tree HDU - 6035多校第一场

单独考虑每一种颜色,答案就是对于每种颜色至少经过一次这种的路径条数之和。反过来思考只需要求有多少条路径没有经过这种颜色即可。直接做可以采用虚树的思想(不用真正建出来),对每种颜色的点按照 dfs 序列排个序,就能求出这些点把原来的树划分成的块的大小。这个过程实际上可以直接一次 dfs 求出。#include<stdio.h> #include<vector> #include<string.

2017-08-05 20:01:10 191

原创 Lazy Running HDU - 6071 多校第三场

给你一个4个点的环,问你从2号点出发, 再回到2号点,长度>=K的最短路是多少。 #include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define LL long long #define fi first #define se second

2017-08-05 19:42:14 274

原创 H - RXD and math HDU - 6063 多校第三场

放0题,通过举例找规律就可以获得 这题就是求(n^k)%(1e9+7) 套个快速幂即可 但要注意n需要先取模在快速幂,不然会超long long#include<iostream> #include<cstdio> using namespace std; #define ll long long const int maxn=500000+10; const int mo

2017-08-04 14:01:04 265

原创 E - RXD and dividing HDU - 6060 多校第三场

第三场。。大量的数学题。。最咸鱼的一次。。纠结于1003却忽视了这道水题; 就是题目难理解一点 求出所有子树的大小与k比较,然后用小的乘上权值求和就行#include<bits/stdc++.h> using namespace std; struct node{ int v,w; }; node temp; vector<node> vec[1000005];

2017-08-04 13:58:10 231

原创 Puzzle HDU - 6048 多校2

一开始没仔细看题,因为做的人不太多,但之后看了题解后才发现好水啊。没做真可惜,时间都卡在gcd那题了。 先看官方题解 综上就是求出每一行的逆序对数,然后判断奇偶#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> using namespace std; int N,M,P;

2017-07-31 21:12:01 222

原创 TrickGCD HDU - 6053 多校2

又是一道疯狂TLE的题 比赛的思路基本没错,但缺少对时间的优化,只要优化了就ac了,所以没做出这题还是比较可惜的; 一开始我想的是找到所有的质数,然后让他们分别作为gcd的值,后来发现会有重复,就想着改用莫比乌斯反演和容斥定理;#include <bits/stdc++.h>#define N 100005#define INF 1000000007#define MOD 10000000

2017-07-31 20:53:58 292

原创 Balala Power! HDU - 6034 多校1

很烦的一道题,当时比赛的时候wa了9次,TLE了10+次,还是没过; 第一种思路是将所有的字母都化为到个位,然后一边取模,在打表之后时间够了,但是一直wa,也没找到错的地方; 第二种思路是用26个字符串固定26个字母,就是考虑进位的地方有点繁琐,但一直TLE; 最后时间到了。。 在补题的时候,就试着用数组代替字符串,然后重复操作,再做到找到最小的可做0的一位做0,还是选择 C++ 提交还

2017-07-31 20:40:40 210

原创 【51nod】1247 可能的路径

看到题目先自己操作一下,发现(a,b)->(a+b,b)->(b+a,a+b-b)=(b+a,a)->(b,a) 即坐标(a,b)与(b,a)可以互换; 又发现若a>b;(a,b)->…->(a%b,b)->(b,a%b) 然后就想到求最小公倍数的模板LL gcd(LL a,LL b){ if(a%b==0) return b; return gcd(b,a%

2017-02-17 21:40:05 305

原创 【51nod】1117 聪明的木匠

哈夫曼树 哈夫曼树(Huffman tree),又名最优树,指给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。#include <bits\stdc++.h>using namesp

2017-02-17 21:06:53 319

原创 【51nod】1246 罐子和硬币

#include <bits/stdc++.h>using namespace std;#define LL long longint main(){ LL c, n, k; while(~scanf("%lld%lld%lld", &n, &k, &c)) { LL haha=k/n; if(haha*n>=c)//这种情况,平分后乱

2017-02-13 21:36:16 192

原创 【51nod】1099 任务执行顺序

贪心。显然差值越大放后面越不利。 所以只要将存储所需的空间和加上最小差值就行 一开始没动脑子,还用struct存数据,还排个序,结果11和14之后的数据全部TLE 再看代码发现可以简化的很简单;#include <iostream>#include <algorithm>#include <cstdio>using namespace std;int main(){ int

2017-02-10 22:42:15 307 1

空空如也

空空如也

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

TA关注的人

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