HDOJ
xiamiwage
这个作者很懒,什么都没留下…
展开
-
HDOJ 3874 Necklace 线段树 单点更新 成段查询
//HDOJ 3874 Necklace 线段树 单点更新 成段查询 /*题意:求某区间没所有值不同的数的总和思路:先对所有的询问按照区间末尾排序 然后从序列前面开始遍历,当遇到相同的元素的时候 将前面的元素删除,这样保证有重复的元素一定出现在距离区间末尾最近的 转化后就变成简单的单点更新 区间求和了 数据较大 要离散化处理*/#include#includ原创 2012-09-26 00:01:41 · 832 阅读 · 0 评论 -
HDOJ 2999 Stone Game, Why are you always there? 博弈 SG函数
//HDOJ 2999 Stone Game, Why are you always there? 博弈 SG函数/*题意:有n个石子排成一行,每次只能取走连续的f个石子,f为给定的一个集合。 问先手 胜负态思路:局面不可能存在无法判断的情况 假设有4个石子 集合中只有一个数2 则后继状态有{0,2}{1,1},{2,0} 因为{0,2}和{2,0}表示一样的状态原创 2012-09-20 23:54:36 · 690 阅读 · 0 评论 -
HDOJ 4069 Squiggly Sudoku 精确覆盖+搜索
//HDOJ 4069 Squiggly Sudoku 精确覆盖+搜索/*题意:数独变形 9块弯弯曲曲的区域 每块有9个小格 往这81个格子里面填写1-9的数字,使得每行,每列,每个区域都含有1、2、3...9思路:先搜索标记出每一块 再精确覆盖*/#include#include#include#includeusing namespace std;#def原创 2012-09-19 23:50:36 · 587 阅读 · 0 评论 -
HDOJ 1536 S-Nim 博弈 SG函数
//HDOJ 1536 S-Nim SG函数/*题意:有n堆石子,每次只能取走 一个给定集合S中出现的元素 的石子,问先手胜负态思路:sg函数*/#include#include#include#define N 105#define M 10005int k,n,m;int op[N],sg[M];//op为给定集合int mex(int n){ int i原创 2012-09-18 23:49:53 · 1912 阅读 · 0 评论 -
HDOJ 1851 A Simple Game 博弈 SG函数中找规律
//HDOJ 1851 A Simple Game SG函数中找规律/*题意:有n堆石子,每堆分别有m1,m2,m3...个 每堆每次最多能取走最多l1,l2,l3...个,最少去一个 问后手的胜负态思路:用sg(n,k)表示剩余n个的一堆石子中 每次最多能取走k个 则有 sg(0,1)=0 sg(0,2)=0 sg(0.3)=0 ... sg原创 2012-09-18 23:45:28 · 894 阅读 · 0 评论 -
HDOJ 1760 Fibonacci again and again 博弈 SG函数
//HDOJ 1760 Fibonacci again and again SG函数/*题意:有3堆石子,每次能从一堆中取走f个,f是Fib数列(1,2,3,5...) 给定3堆石子的数量,问先手的胜负态思路:SG函数*/#include#include#include#define N 20#define M 1005int op[N];int sg[M原创 2012-09-18 23:47:12 · 778 阅读 · 0 评论 -
HDOJ 3980 Paint Chain 博弈 SG函数
//HDOJ 3980 Paint Chain 博弈 SG函数/*题意:有n个石子围成一个环,每次从中取走m个连续的石子,无法取的输思路:第一步将取走之后环就变成了链,之后就可以用SG了 所以特判第一步之后 先手变后手 后手变先手就可以了*/#include#include#include#define N 1005int n,m;int sg[N];int原创 2012-09-20 23:55:12 · 797 阅读 · 0 评论 -
HDOJ 1524 A Chess Game SG函数
//HDOJ 1524 A Chess Game SG函数/*题意:有一个有向无环图,在一些点有石子,这些石子每次可以往其后继结点移动。 两个人轮流移动,不能移动的为输思路:建图,算出每个点的SG值*/#include#include#include#define N 1005#define M 1000005int n,m;int num,head[N];in原创 2012-09-22 00:31:23 · 800 阅读 · 0 评论 -
HDOJ 3911 Black And White 线段树 区间合并 成段更新
//HDOJ 3911 Black And White 线段树 区间合并 成段更新/*题意:有一堆黑、白球排成一排,有两种操作: 1:将一段连续的球改变颜色,黑色变成白色,白色变成黑色 2:查询一段区间内连续的黑色的球的个数 思路:每个结点记录7个信息: lsum0:从左端开始的连续的白球个数 rsum0:从右端开始的连续的白球个数 msum0:区间内连续的原创 2012-09-26 00:02:19 · 970 阅读 · 0 评论 -
HDU 2871 Memory Control 线段树 区间合并 单点更新 容器的使用
//HDU 2871 Memory Control 线段树 : 区间合并 单点更新 容器的使用/*题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2871题目大意:现在有1到N(N <= 50000)个连续内存块,然后给出四种操作: 1. Reset 释放所有内存块,并且输出“Reset Now”。 2. New x 找到一块有连续x块原创 2012-09-23 23:54:44 · 836 阅读 · 0 评论 -
HDOJ 4277 USACO ORZ 搜索 剪枝
//HDOJ 4277 USACO ORZ 搜索 剪枝/*题意:将n跟木棒分成3堆,3堆木棒的总和分别为a,b,c,满足能以a,b,c组成三角形,问有多少种不同的情况思路:暴搜+剪枝 先固定一根木棒在某一堆*/#include#include#include#includeusing namespace std;//#define int64 long long#def原创 2012-09-26 00:08:26 · 670 阅读 · 0 评论 -
HDOJ 4414 Finding crosses 搜索
//HDOJ 4414 Finding crosses 搜索/*题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4414题意:问一副图中的十字架个数有几个 十字架的定义是由'#'组成并且十字架的size大于等于3且不能有'#'出现在其相邻的位置(水平、竖直) 具体请看题目思路:枚举中点位置,然后找其四个方向能延伸出去多少个'#原创 2012-09-24 23:36:17 · 722 阅读 · 0 评论 -
HDOJ 4417 Super Mario 线段树 单点更新 成段查询
//HDOJ 4417 Super Mario 线段树 转化为单点更新 成段查询/*题意:查询区间内小于等于某数的数的总和思路:离线查询,先记录所有的询问并排序,然后一边删一边查,查之前把不满足的删掉 就转化为简单的单点更新,成段求和。*/#include#include#include#define lson rt<<1,l,mid#define rson rt<原创 2012-09-24 23:34:15 · 748 阅读 · 0 评论 -
HDOJ 3333 Turing Tree 线段树 单点更新 成段查询
//HDOJ 3333 Turing Tree 线段树 单点更新 成段查询/*题意:求某区间没所有值不同的数的总和思路:先对所有的询问按照区间末尾排序 然后从序列前面开始遍历,当遇到相同的元素的时候 将前面的元素删除,这样保证有重复的元素一定出现在距离区间末尾最近的 转化后就变成简单的单点更新 区间求和了 数据较大 要离散化处理*/#include#in原创 2012-09-24 23:33:32 · 744 阅读 · 0 评论 -
HDOJ 1556 Color the ball 线段树 : 成段更新 单点查询
//HDOJ 1556 Color the ball 线段树 : 成段更新 单点查询/* 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1556题目大意:n(n<=100000)个气球从左到右排列,每次在[a,b]区间上涂一次颜色, m次操作后,问第i个气球一共被涂过几次颜色。思路:成段更新*/#include#include原创 2012-09-23 23:47:59 · 1004 阅读 · 0 评论 -
HDOJ 1394 Minimum Inversion Number 线段树 : 单点更新 成段求和
//HDOJ 1394 Minimum Inversion Number 线段树 : 单点增加 成段求和/*题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1394题意:已知一个数列,数列个数n<=5000,数列中的数的范围在[0,n-1],并且数不重复。每次可以将数列的第一个数移动到最后面,这样可以构造出n个数列。求这这n个数列中的最小原创 2012-09-22 23:56:42 · 843 阅读 · 0 评论 -
HDOJ 1754 I Hate It 线段树:单点替换 成求段最值
//HDOJ 1754 I Hate It 线段树:单点替换 成求段最值/*题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1754题目大意:有n(0<n<=200000)个学生,已知每个学生的初始成绩。 有m(0<m<5000)次操作: 1、将a学生的成绩改为b; 2、查询区间[a,b]中成绩最高的思路:线段树叶子结点记录每个原创 2012-09-22 23:59:54 · 1673 阅读 · 0 评论 -
HDOJ 4203 Doubloon Game 博弈 找规律
//HDOJ 4203 Doubloon Game 博弈 找规律/*题意:有n个硬币,两个人轮流取,每次只能取m个pow,(1,m,m^2...) 如果先手必败输出0,否则输出第一步最少取走的硬币数量思路:找规律 当n=2时: 0 1 2 |3 4 5 |6 7 8 9 ... P N N |P N N |P N N P ... 当n=3时: 0 1原创 2012-09-22 00:32:56 · 731 阅读 · 0 评论 -
HDOJ 4155 The Game of 31 博弈搜索
//HDOJ 4155 The Game of 31 博弈搜索/*题意:有编号为1、2、3、4、5、6的牌各4张,共24张,两个人轮流取牌, 取牌后要使所有取出的牌的总不超过31,不能取的输。 游戏从给定的局面开始。思路:从给定的局面开始dfs,当此状态能够到达p状态,则此状态有n状态 否则为p状态,然后判断此时是先手还是后手*/#include#include原创 2012-09-22 00:32:03 · 900 阅读 · 0 评论 -
HDOJ 3951 Coin Game 博弈
//HDOJ 3951 Coin Game 博弈/*题意:有n个硬币围成一圈,每次能取1-k个硬币,问先手胜还是后手胜思路:如果k>=n,那么一次就能取完了,先手胜 如果k==1,直接奇偶就可以判断胜负了 其他情况下,先手第一次取完后,硬币就展开成一条链,后手就在链中间取 将链分成均等的两份,然后根据对称性就必能取胜。*/#include#include#incl原创 2012-09-17 20:24:19 · 483 阅读 · 0 评论 -
HDOJ 3715 Go Deeper (2Sat: 二分答案判定)
//HDOJ 3715 Go Deeper (2Sat: 二分答案判定)/*题意:给定一个程序 ,求go(0, n, m)输出的值中的最大值 程序如下: go(int dep, int n, int m) begin output the value of dep. if dep < m and x[a[dep]] + x[b[dep]] != c[dep] then原创 2012-09-15 19:11:15 · 577 阅读 · 0 评论 -
HDOJ 3032 Nim or not Nim? (博弈 :SG)
//HDOJ 3032 Nim or not Nim? (博弈 :SG)/*题意:有n堆石子,每次可以选择一堆,执行一下操作: 1、取走至少一个 2、如果这堆石子大于一个,可以将其分成2堆,每堆至少一个 取走最后一个的胜利思路:在Nim的基础上增加了一种操作,无法直接使用Nim的做法,尝试找规律 易得sg(0) = 0; sg(1) = 1; 当一堆原创 2012-09-14 20:55:57 · 413 阅读 · 0 评论 -
HDOJ 2897 邂逅明下 (博弈 : 找规律)
//HDOJ 2897 邂逅明下 博弈 找规律/*题意:(题目很操蛋) 有n个硬币,每次最少取p个,最多取q个,当剩余硬币少于p个时,要一次性取完思路:找规律 例如7 2 4 1 2 3 4 5 6 7 8 9... P P N N N N P P N... 结果很显然*/#include#include#includeint n,p,q,ans原创 2012-09-14 19:42:38 · 2566 阅读 · 0 评论 -
HDOJ 4288 Coder 线段树 vector偷懒做法
//4288 Coder 线段树 vector偷懒做法/*题意:给一个序列,每次有3种操作: 1、往有序集合中增加一个原素x 2、把集合中的元素x 3、查询集合中下标%5=3的元素的总和思路:vector*/#include#include#include#include#include#includeusing namespace std;char o原创 2012-10-05 00:48:40 · 910 阅读 · 0 评论 -
HDOJ 3714 Error Curves 三分搜索
//HDOJ 3714 Error Curves 三分搜索/*题意:给定一堆二元一次函数 现在定义一个函数F(x) = max(Si(x)),x is [0, 1000],S(i)表示给定的那些二元一次方程 现在求F(x)的最小值 先画图发现题目所定义的函数也是一个类似二元函数的图形 3分求极值*/#include#include#include#include原创 2012-09-15 18:59:16 · 409 阅读 · 0 评论 -
HDOJ 1079 && POJ 1082 Calendar Game (博弈: 暴力枚举所有状态的P\N)
//1079 Calendar Game 博弈 暴力枚举所有状态的P\N,其实网上有非常简单的做法#include#include#include#include#includeusing namespace std;bool vis[105][15][35];int mon[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};struc原创 2012-09-13 23:11:56 · 1448 阅读 · 0 评论 -
HDOJ 3389 Game (博弈:Staircase Nim)
//3389 Game (Staircase Nim)/*题意:有n个盒子编号为1-n,每个盒子里面有若干物品 当编号满足a>b && (a+b)%3==0 && (a+b)%2==1时 可以从a盒子中拿>=1个物品到b盒子中思路:找规律后转换为Staircase Nim 满足此条件:(a+b)%3==0 && (a+b)%2==1的即是3个倍数并且是奇数:3、9、15、原创 2012-09-13 23:00:04 · 716 阅读 · 0 评论 -
HDOJ 2492 Ping pong 线段树+离散化
//2492 Ping pong 线段树+离散化/*题意:有一陀人从左到右排成一排,每个人有一个唯一的技能值,每个人都找其他人比赛,比赛前要再找一个人做裁判,裁判的技能值不能比这两个人都高,也不能比这两个人都低,并且这两个人到裁判的距离总和不能大于他们之间的距离,不同的人比赛或者比赛时候的裁判不同算不同的比赛,求一共能比几场思路:由题意知道裁判必须在这两个人中间枚举每一个人做裁原创 2012-10-05 00:48:58 · 818 阅读 · 0 评论 -
HDOJ 1823 Luck and Love 二维线段树 单点更新 成段求最值
//HDOJ 1823 Luck and Love 二维线段树 单点更新 成段求最值/*题意:当操作符为‘I’时,表示有一个MM报名,后面接着一个整数,H表示身高,两个浮点数,A表示活泼度,L表示缘分值。 (100<=H<=200, 0.0<=A,L<=100.0)当操作符为‘Q’时,后面接着四个浮点数,H1,H2表示身高区间,A1,A2表示活泼度区间,输出符合身高和活泼度要求的MM中原创 2012-10-03 23:08:36 · 1119 阅读 · 0 评论 -
HDOJ 4000 Fruit Ninja 线段树+数学
//HDOJ 4000 Fruit Ninja 线段树+数学/*题意:有一个数列a[],当下标满足i<j<k时候,满足a[i]<a[k]<a[j]个总数 -->x=a[i]; y=a[j]; z=a[k]; -->x<z<y 思路:(线段树操作很简单,数学转化不好想) x x<(y?z) - x<y<z; //(y?z)表示y、z大小不确定 一边更新,一边查原创 2012-10-04 00:23:22 · 633 阅读 · 0 评论 -
HDOJ 3682 To Be an Dream Architect 暴力
//HDOJ 3682 To Be an Dream Architect 暴力/*题意:有一个n*n的魔方,每次去除一排,问最后剩几个思路:只有1000次删除,记录所有删除的点,排序后去重,数据比较水...*/#include#include#include#includeusing namespace std;#define N 1000005int T,n,m原创 2012-10-08 00:06:18 · 576 阅读 · 0 评论 -
HDOJ 2177 取(2堆)石子游戏 博弈 威佐夫博奕变形(Wythoff Game)
//HDOJ 2177 取(2堆)石子游戏 威佐夫博奕变形(Wythoff Game)/*题意:在Wythoff Game游戏的基础上加一个限定:只有2堆石头 如果是必胜态,则需要输出所有可以走的第一步,如果可以同时取走相同的石子的情况要先输出思路:预处理记录奇异局势的左边位和右边位出现的是第几个奇异局势 正常的Wythoff Game规则判断胜负态 然后枚举所有可能出现原创 2012-09-17 23:01:35 · 1439 阅读 · 0 评论 -
HDOJ 1166 敌兵布阵 线段树: 单点更新 成段求和
//HDOJ 1166 敌兵布阵 线段树: 单点更新 成段求和/*题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1166题意: N个工兵营地(N<=50000),已知每个工兵营地的初始人数, M次(M<=40000)操作 : 1、在第i个营地增加j个人; 2、在第i个营地减少j个人;原创 2012-10-09 10:36:02 · 650 阅读 · 0 评论 -
HDOJ 4107 Gangster 线段树 成段更新变化
//HDOJ 4107 Gangster 线段树 成段更新变化/*题意:n个数,初始都是0,m次更新操作: 若元素a[i] < p,则a[i]+=c,否则a[i]+=2*c 最后输出所有的数字思路:当一个区间内的最大值mmax<p,则该区间内所有的数都+c,朴素的成段更新 当一个区间内的最小是mmax>=p,则该区间内的所有的数都+2*才,朴素的成段更新 不满足的话原创 2012-09-26 00:02:54 · 752 阅读 · 0 评论