method
文章平均质量分 53
cyl纤云弄巧
To Be
展开
-
POJ 3176 (简单dp)
http://poj.org/problem?id=3176题意:输入n层数字三角形,求从第一层到最后一层最大权值和。其实用递归很简单的解决,但是数据范围是350层,递归确实可以解决,但是会超时。很容易看出来,maxn(i,j)是第i层第j数字到底层的最大权值和,所以要求maxn(i,j)有两种选择a(i,j)+MAX(maxn(i+1,j),maxn(i+1,j+原创 2016-08-18 09:15:30 · 476 阅读 · 0 评论 -
HDU 6058 枚举
枚举题意: 有一列数字,现在问所有的区间的第k大的数字之和是多少?思路: 直接去把每一个区间求出第k大的数字求出会超时,但是分析k值可以发现范围特别小,所以可以选择枚举每一个数字,把枚举的数字当做第k大值,求出其贡献值即可。 为了求出第k大值其区间范围只能是比其大的k 个数字,分为左右两边,枚举每一次都求出左右的两个区间的比这个数字大的k个数字,找出之后合法区间为:若这个数字左边原创 2017-08-03 10:09:28 · 246 阅读 · 0 评论 -
HDU 6143 排列组合 - DP
排列组合 - DP题意: 给出m字母,现在要求用m个字母去取名字,firstname 和 lastname 不能同时存在相同字母,问:会有多少种组合数,对于firstname 和 lastname 必须保证长度为n。 数据量0<n,m<2000 0 < n,m < 2000题意: 最开始最开始用的DP去推出所有的解,复杂度达到了n3n^3 ,平常对复杂度的不重视导致比赛时候频频犯原创 2017-08-17 23:58:57 · 460 阅读 · 0 评论 -
HDU 6103 枚举 +尺取
枚举 +尺取题意: 给出一个字符串,问两个不相交的字串对称相减的绝对值和小于等于 m的最长长度。思路: 如果存在两个不相交的字串,那么必然两个字串之间存在对称轴,分为两种:1. 子串之间有奇数个其它字符,那么枚举其中的字符。2. 子串之间有偶数个其它字符,那么枚举其中的空格。对称轴确定之后,对对称的串计算出其对称相减的和保存在数组中,那么问题转化为,在一个数组中找出和小雨等于m的最长原创 2017-08-11 09:24:19 · 328 阅读 · 0 评论 -
codeforces 423 D. High Load 构造一个思维的树
构造一个思维的树题意: 有n个节点,其中有k个特殊节点,特殊的节点只能连接一条边,其它的至少两条边。问如何连接才能使得特殊节点的最远距离最短,输出一种方案。思路: 可以看出连接时分层的,最外层只能是K个特殊节点,根据这样的性质可以直接得出最远距离,当(n-1)%k == 0的时候说明恰好有(n-1)/2层,其距离为乘以2,当有余数为1的时候∗2+1既可,其它的就是∗2+2*2 + 1既可原创 2017-08-25 09:56:48 · 316 阅读 · 0 评论 -
CF 423 C : String Reconstruction
CF 423 C : String Reconstruction题意: 有一个字符串被藏起来了,但是有个人知道有些子串出现的位置,现在让你还原这个子串尽可能的字典序小。思路: 原来我是直接暴力去模拟,对于每一个位置我不管有没有字符,反正不会矛盾所以直接添加,但是直接RE了,原来是题中说n<105n < 10^5 ,导致数组开小。。。改了数组之后TE,当时觉得是子串之间会重复,但是优化很原创 2017-08-23 16:09:56 · 316 阅读 · 0 评论 -
HDU 5826 速度+加速度+积分
速度+加速度+积分题意: 有n个小球,最开始给出小球的初始位置和初速度和方向,每一个小球的加速度满足C=a∗vC = a*v,C为常数a为加速度v为速度,现在问在t秒的时候,第k小的速度是多少。思路: 最开始千万别被吓到,小球的速度因为满足动量守恒,所以即使相撞也只是两个求交换了一下速度,不影响球的实际运动。所以第k 小的速度直接就是最开始的第k小。 再求出t秒时候的速度时,可以根原创 2017-08-28 18:06:07 · 623 阅读 · 0 评论 -
codeforces 810 C - Do you want a date?
codeforces 810C - Do you want a date?题意: 有一个集合,其中有n个数字,这个集合有很多子集,现在规定每一个子集必须至少有两个数字,其中子集中两个数字最大的差值就是这个子集的函数值,现在求出所有子集的函数值的和,需要取模。思路: 很容易想到枚举集合中最大的值的位置,需要对元素排序,例如在i位置和j位置(i#include <iostream>#in原创 2017-10-09 18:09:34 · 324 阅读 · 0 评论 -
codeforces 810 D . Glad to see you!
D. Glad to see you!题意: 题意往往是最难的对于弱鸡来说。 简化题意如下: 有n个数字1到n,现在一个人选了k个,现在让你从k个中找出两个数字,找的方法是:询问!这便是交互问题,通过询问的方式:询问三个数字1 x y,1代表问,x、y代表你想问的两个数字,另一个人会回答真正的两个数字离x、y哪一个数字最近,离x近或者两个一样近是TAK,否则是NIE。最后输出答原创 2017-10-09 22:01:12 · 574 阅读 · 0 评论 -
Codeforces Round #411 (Div. 2) E - Ice cream coloring
E - Ice cream coloring题意: 有一棵树T,节点为1~n,现在有m种ice cream,每一个节点都有si种ice cream,现在新建一棵树G,节点为ice cream 的种类数,标号为1~m,边是否相连有如下规则: if and only if there exists a vertex in T that has both the v-th and the u原创 2017-10-11 22:19:10 · 295 阅读 · 0 评论 -
B. Mike and strings
B. Mike and strings题意: 有n个相同长度的字符串,现在问是否可以通过一种操作使得恢复成一样的字符串,若能,输出最少的次数。 操作:把当前字符串的第一个字母放到最后一个字母的后边。 n < 50. length < 50.思路: 看到数据的范围就感觉可以暴力求,但是对于字符串的题,不要急于动手打代码。 想清楚思路: 成为相同的字符串原创 2017-10-12 12:01:26 · 320 阅读 · 0 评论 -
C. Mike and gcd problem
C. Mike and gcd problem题意: 定义一种beautiful数列,满足gcd(b1,b2,···,bn) > 1. 现在给出一个数列A,有一种操作:对ai操作,使得a[i] = ap[i]-a[i+1],a[i+1] = a[i]+a[i+1] 问最少多少次操作使得题中满足beautiful。思路: 数学题就多思考,有公式的情况下向公式思考。根据操作的方法原创 2017-10-12 12:02:06 · 312 阅读 · 0 评论 -
D - Mike and distribution
D - Mike and distribution题意: 有两个数列,个数相同,现在选出不超过n/2+1个数列下标,使得在每一个数列中下标的数字之和的二倍大于原数列,输出答案和下标。思路: 题意是经过化简 的,因为题中并没有说要选择多少个下标,只是一个范围,那么最简单的做法当然是选择越多越好。 方法:思考挑选的个数,明显是大于数列个数的一半的。 先对A数列做一次排序,那么从大原创 2017-10-12 20:26:28 · 297 阅读 · 0 评论 -
I - Ugly Problem HDU-5920
I - Ugly ProblemHDU - 5920 题意: 有一个大数,长度不超过1000,现在需要分解它,并且分解出来的数字都是回文数字,求出每一个分解 的个数和每一个分解的的数字。要求个数不能超过50.题意: 此类题需要思维发散,向回文串的思路走的话会想到先找出一半,然后复制另一半,得到的数字必然是回文串,并且尽可能的大,当然会遇到此回文串比原串 大,即应该将左边的一半减一再还原,原创 2017-10-16 21:46:50 · 289 阅读 · 0 评论 -
HDU 5459 根据题意找规律
HDU 5459 根据题意找规律题意: 求一个字符串所有c字符位置到其它位置所需的步数和。思路: 就根据题目的意思,如果要求出下一项则需要前两项的和加上前两项移动需要的步数,此时如果能从这里想的话就很简单了。#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long lo原创 2017-12-08 19:52:59 · 363 阅读 · 0 评论 -
HDU5442 最小(大)表示法
最小(大)表示法 一个字符串扩增到两倍的时候,在0~n-1的范围中都可以通过循环找到与原字符串同构的字符串,但是其中有两个特殊的字符串,字典序最大和字典序最小(数字也可以当做字典序来处理),直接暴力找到最小或者最大的算法复杂度是O(n^2) ,有一种最小(大)表示法可以解决此问题。百度论文:https://wenku.baidu.com/view/c6c5e7335a8102d276a22fa原创 2017-12-02 10:12:43 · 355 阅读 · 0 评论 -
HDU 3374
HDU 3374题意: 字符串长度为n(n<=1000000),问从哪个位置循环是最大字符串,从哪一个字符串循环时最小字符串,如果存在多个输出最大、最小的位置以及有多少个。思路: 利用kmp算出有多少个循环,便是多少个。 利用最大和最小表示法求出位置,注意输出最小的位置。#include <iostream>#include <cstring>#include <cstdio>原创 2017-12-03 20:29:27 · 499 阅读 · 0 评论 -
HDU 6121 满k叉树 + 思维
满k叉树 + 思维题意: 给出n个节点,按照 公式给的方式建树,每一个节点儿子节点的个数加上自己本身就是它的size,求出n个节点的size的^值。思路: 首先需要知道这个树是什么样子的,通过在本子上画图很容易发现这就是一个k叉树。对于一个满的k叉树,其所有size的异或值就是size本身通过这个性质发现,难点是在于怎么找到所有的子满k叉树,问题变成找到不满的k叉树的子树,然后知道其原创 2017-08-16 21:53:24 · 586 阅读 · 0 评论 -
POJ 3274 (翻转||关灯)
题意: 有M*N的0、1数列,求出怎么反转才能使其全部为零,反转的方式是上下左右受中间 的牵连也会翻转。思路: 题的模型常常被称为关灯问题,也有点和POJ3276的思想雷同,这里是确定第一行的 排列方式就知道了后边的排列方式。知道这种思想,并且知道位运算是关键。#include <iostream>#include <cstdio>#include <cstring>us原创 2016-12-26 22:36:15 · 379 阅读 · 0 评论 -
POJ3259(经典bellman判断负权)
POJ3259题意:有n个虫洞,问有从一些虫洞穿行过程中因为时间的快慢能遇到自己吗?相对论。其实题很简单,就是问有没有负权的存在,若有将会一直松弛。#includeusing namespace std;#define INF 0x3f3f3f3f#define M 5200int dist[M];int n,m,f;int all;class Node原创 2016-08-08 15:13:26 · 339 阅读 · 0 评论 -
POJ 2262 (简单素数判定 ,需要优化)
http://poj.org/problem?id=2262题意:哥德巴赫猜想;一个数哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的偶数都可写成两个质数之和。题中给出的范围是成立的,所以不用考虑:Goldbach's conjecture is wrong.这道题让我知道了,想问题的原创 2016-08-19 16:44:52 · 324 阅读 · 0 评论 -
POJ 1062(昂贵的聘礼 枚举 + Dijkstra)
POJ1062这道题是中文题,不多说,但是问题是数据可能不易看懂,比如样例的10000 3 2 分别是原价,等级,和可能兑换物品的数量,接下来是两行可能兑换的物品及另需要的钱。#include#includeusing namespace std;#define INF 0x3f3f3f3f#define Maxn 200int M,N;int price[Ma原创 2016-08-08 18:05:19 · 426 阅读 · 0 评论 -
POJ 2253(floyd 条件改变)
POJ 2253题意:有很多坐标,求点一到点二的每个通路之中最长的距离,输出最长的距离之中最短的那个。这道题无关最短路,利用Floyd的遍历,但是关键在于条件。#include#include#includeusing namespace std;double path[210][210];class coordinate{public:原创 2016-08-08 21:08:38 · 321 阅读 · 0 评论 -
POJ 1125 (经典水题 floyd)
POJ1125题意:众所周知,证券经纪业依靠的就是过度的传言。您需要想出股票经纪人中传播假情报的方法,让您的雇主在股票市场的占据优势。为了获得最大的效果,你必须蔓延最快的方式谣言。不幸的是你,股票经纪人信息只信任他们的“可靠来源”,这意味着你在你传播谣言之前必须考虑到他们的接触结构。它需要特定股票经纪人和一定的时间把谣言传递给他的每一位同事。你的任务将是写一个程序,告诉您选择哪一个原创 2016-08-09 14:38:35 · 2823 阅读 · 0 评论 -
POJ 2240(水题 条件改变的 floyd 算法)
POJ2240题意:有n种类型的货币求是否存在经过兑换能增值。思路:改变条件即可。#include#include#includeusing namespace std;int n;double dist[100][100];char str[100][100];int find_it(char a[]){ for(int i = 1;i <=原创 2016-08-09 15:27:23 · 559 阅读 · 0 评论 -
POJ 1094(TopoSort)
POJ 1094题意:该题题意明确,就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列。是典型的拓扑排序,但输出格式上确有三种形式: 1.该字母序列有序,并依次输出; 2.该序列不能判断是否有序 3.该序列字母次序之间有矛盾,即有环存在。但是注意顺序,必须要先判断环,其次是无序,最后才是有序。#include#include原创 2016-08-11 10:01:02 · 333 阅读 · 0 评论 -
暑假小训练 (一道 不能不会的用结构体搜索题)
http://acm.hust.edu.cn/vjudge/contest/129524#problem/I题意:8x8的象棋,给出开始和结束的点,和一个不能走的点,求出最短路。#include#include#include#includeusing namespace std;int ax,ay,bx,by,cx,cy;int gragh[10][1原创 2016-08-23 20:38:37 · 442 阅读 · 0 评论 -
POJ 2503(简单map,字符串的处理)
POJ 2503题意:输入英语与外语的字典,问接下来输入的单词是否出现。主要是字符串的处理。#include#include#include#includeusing namespace std;int main(){ freopen("in.txt","r",stdin); char English[15],Foreign[15]; map原创 2016-08-12 10:20:17 · 451 阅读 · 0 评论 -
POJ 1013 (经典++ 的枚举题,称量找出假硬币)
http://poj.org/problem?id=1013 这是一道把枚举思想用到极致了。题意百度上太多了,不解释。 思路:想要找出哪一个硬币是假的枚举 A 到 L 的每一种情况。每一种情况要枚举是轻还是重。 判断轻重枚举三种条件。 如x是轻的: 1:even的情况是 Left 和 Right 都没有出现x。 2:up 的情况是原创 2016-08-24 16:56:32 · 1664 阅读 · 0 评论 -
POJ 1222 (枚举+熄灯问题)
http://poj.org/problem?id=1222题意:5x6个灯输出怎么熄灯才能都是灭的。0是灭,1是亮。思路:首先要确定第一行的灯,随后剩下的灯随之确定,因为如果puzzle[r][c]是亮的,则要按下press[2][j]。怎么确定第一行的灯呢,第一行有2^6种情况,依次枚举即可。要点有三处: 1:对puzzle和press的初始化。原创 2016-08-25 10:44:10 · 810 阅读 · 1 评论 -
POJ 2418 (简单map)
题意:输入字符串,按字典序输出字符串和它所占的百分比。map是一个容器,存入数据的时候默认字典序存入,只是不经常用所以很难控制输入输出。对于getline的解释: istream&getline ( istream &is , string &str, char delim );里面分别是:输入方式,输入目标,停止标记,来源:http://blog.sina.com.cn/s/原创 2016-08-13 10:47:15 · 563 阅读 · 0 评论 -
POJ 3087 (简单map + 模拟)
POJ 3087题意:给出洗牌的方式,问几次能洗出要求的牌。洗牌方式就是插入,很简单。用mapvisit 记录是否出现过。值得学习的就是这种想法,用map记录判断是否能洗出这种牌。#include#include#includeusing namespace std;int main(){ int t = 0,text;原创 2016-08-13 11:27:36 · 353 阅读 · 0 评论 -
POJ 2362(DFS)
POJ2362题意:给定各个长度,问能否组成正方形。DFS:现在看来重要的是思想,像一个问题要分步去思考。 1:正方形边长大于4,总长除以4余数0 2:最大边长不能大于总长除以4 3:查找边长需要从大向小查找,需要排序,且查找到3个满足边长就成功。//#include#includeusing namespace std;int stick原创 2016-08-15 09:59:11 · 366 阅读 · 0 评论 -
POJ 1182(食物链)
题意:汉语题。思路:挑战上边的题,看了很多遍,还是需要理解,暂时可以把每个动物有三种性质,分别判断得出结果。#include#include#includeusing namespace std;const int MAX = 50005;int F[MAX*3];int n,m;int Find(int x){ if(x == F[x]原创 2016-11-23 19:07:19 · 320 阅读 · 0 评论 -
POJ 3276 (变形尺取法)
题意: n头牛,现在要求排列整齐并且方向一致F为前,B为向后,现在有一列牛,求出最少 的次数能把牛方向排列一致。每次只能去固定的牛一起转向。思路: 如果是直接暴力,那么太麻烦的有至少O(N^3)的时间复杂度。 最好的思路是由之前的状态确定下一个状态,例如是从左向右遍历,如果是向后那么 这头牛必须要反转.因为反转的个数是固定的所以要记录之前的反转状态,记住这一点,便不难理原创 2016-12-26 22:01:50 · 436 阅读 · 0 评论 -
Gym 101617D 线段树
Gym 101617D题意: 有一个nXn的图,由.和#组成,现在从1,1出发,每次跳最多k个格子,落点不能是#,问到(n,n)最少需要几步,如果无法到达则输出-1.注意只能向右和下走。思路: 直接bfs查询会超时,因为2000的数据会存很多点,但是如果对能到达的格子快速查找最小的步数可以用高级数据结构来完成,线段树。对于每一行和每一列用线段树维护#include <iostream原创 2017-12-15 12:48:33 · 258 阅读 · 0 评论