乱七八糟
Martin20150405
博客搬家啦,http://martin20150405.github.io
(邮箱Martin20150405@163.com)
展开
-
(HDU 5724)2016 Multi-University Training Contest 1 Chess(SG函数、博弈)
题意在n*20的棋盘上有若干个棋子,规定每个棋子只能向右移,并且当右边有棋子的时候可以跳过那些棋子,同一个格子只能有一枚棋子,最后不能操作的人胜。思路每一行的棋子是互不相关的,因此这是一个组合博弈问题,只需要考虑一行的情况(SG值),然后全部异或即可(和尼姆博弈挺像的吧,本人博弈水平甚烂,看不出区别) 关于SG函数的求法可以参考 这里代码#include #define原创 2016-07-24 15:41:50 · 498 阅读 · 0 评论 -
ZOJ 3953 Intervals (贪心/区间交)
题意给定一些区间,要求删除一些区间使得任意取三个区间不会出现两两相交的情况思路先将区间按左端点从小到大排序,遇到出现三个区间两两相交的情况时,显然删掉最靠右的区间会比删掉其他两个更优 如何判断当前有三个区间两两相交呢? (参考同学的思路)我们可以维护一个缓冲区间,区间里的元素按照右端点从大到小排序,如果新的区间的左端点大于区间最后一个元素的右端点,因为是按照左端点排序扫描的,那么就不用再考虑最后原创 2017-04-16 18:50:04 · 683 阅读 · 0 评论 -
UESTC 1339 郭大侠与线上游戏 (STL插入删除/迭代器)
STL erase后指针变化对于用数组实现的数据结构(vector,deque),除一个元素后之后所有的迭代器都会失效对于关联型数据结构,删除后只会对当前节点有影响删除节点前应该先取得下一个节点或上一个节点的位置for( itList = List.begin(); itList != List.end(); ) { if(shouldDel( *itList)) i原创 2017-04-20 10:06:57 · 622 阅读 · 0 评论 -
ZOJ 3954 Seven-Segment Display (预处理/状态压缩)
这是2017浙大校赛的最后一道题(还有一道实在不会做),感觉并没有什么特别难的题目,写的题解好像在以后来看也没什么参考价值。。题意每一列作为一个元素,是否存在一个排列使得结果刚好是标准模式思路由于排列总共就7!7!种,直接打表就好了,但是因为组数较多,每次都O(n)O(n)查找会超时,所以可以将状态表示成一个整数(刚好63位,longlong能够存的下),每次二分找答案,由于存在空着的元组,所以排列原创 2017-04-18 21:49:19 · 588 阅读 · 0 评论 -
ZOJ 3952 Fibonacci Sequence Chicken Edition(构造/模拟)
题意chicken,chicken,chiken…思路原创 2017-04-18 21:41:27 · 837 阅读 · 0 评论 -
HDU 5973Game of Taking Stones 51nod 1185 威佐夫游戏 V2(威佐夫博弈)
思路威佐夫博弈套公式即可 若b>a则,floor(1.618*(b-a))==a时先手必败 因为精度要求比较高,处理好精度就可以Java高精度+二分求根号+读入优化代码import java.io.*;import java.math.BigDecimal;import java.math.BigInteger;import java.util.Scanner;import java.u原创 2016-10-17 12:39:36 · 604 阅读 · 0 评论 -
[模版]尽整些歪门邪道
二进制相关ll s=12;//传入参数会转换为unsigned int(如果是long long在函数名后加 "ll")cout<<__builtin_ffs(s)<<endl; //右起第一个1的位置cout<<__builtin_clz(s)<<endl; //左侧0的个数cout<<__builtin_ctz(s)<<endl; //右侧0的个数cout<<__built原创 2016-08-12 17:02:09 · 475 阅读 · 0 评论 -
(HDU 5802)2016 Multi-University Training Contest 6 Windows 10 (贪心)
思路为什么贪心题/搜索题也可以这么难TAT 对于给定的n,m,如果n≤mn\leq m可以直接给出答案 对于n>mn\gt m的情况答案会出现在一直往下减再往上加和一直往下减休息几次再减之中如果cur>tarcur\gt tar的情况,可以一直往下减休息一下的次数可以用来抵消往上加的次数题目说不能减到0以下,是指如果减了会小于0,那么音量变成0(不是说不能减)任何时候执行加法效果都是一样原创 2016-08-06 20:54:06 · 519 阅读 · 0 评论 -
(HDU 3032) Nim or not Nim(SG函数、博弈)
思路打表代码打表发现是以4位单位循环的#include using namespace std;int g[1010];void init() { memset(g, -1, sizeof(g));}int getSG(int x) { if(g[x] != -1) return g[x]; if(x == 0) return 0; if(x原创 2016-08-06 20:20:25 · 624 阅读 · 0 评论 -
(HDU 5795)2016 Multi-University Training Contest 6 A Simple Nim (SG函数、博弈)
思路和之前做过的题目很类似,然而我又看了一个小时,果然对博弈的理解还不够。。 SG函数的值为所有后继状态的SG函数值中没有出现过的最小自然数。 根据nim博弈中SG函数的求法,如果被拆成了3堆,那SG值就是三堆个数的异或(算作一个后继)打表代码打表可以发现是按8位单位循环的#include <bits/stdc++.h>using namespace std;int g[1010];voi原创 2016-08-06 20:05:09 · 465 阅读 · 0 评论 -
[博弈]SG函数的求法和一些结论 NIM博弈
后继:按照游戏规则能够达到的下一个状态SG函数性质:1.对于组合游戏(n个不相关的游戏并行,例如3堆石子进行取石子游戏),结果的SG值为各个分量的SG异或值2.y是x的后继,若SG(x)=0,则任意SG(y)!=0,若SG(x)!=0,则存在SG(y)=0(即先手若碰到SG!=0的情况,只要让后手面对的状态SG=0即可)3.当且仅当SG(x)=0时,局面x是必败态原创 2016-07-19 20:45:57 · 932 阅读 · 0 评论 -
(HDU 5754)2016 Multi-University Training Contest 3 Life Winner Bo (博弈/DP)
题意在一个n×mn\times m的棋盘左上角有一个棋子(四种类型之一),要求移动到右下角(只能往右或者往下),问都采取最优策略的情况下,先手方是否必胜(或者平局)。思路从来没做过这么奇怪的博弈题,写完就会下国际象棋了。。 我们按棋子的类型分类讨论king(国王) 走法:右11或下11或右下11 当且仅当nn和mm都为奇数时,先手必败,否则必胜。 可以枚举3×33\times 3的情况,先原创 2016-07-24 16:30:56 · 519 阅读 · 0 评论 -
ZOJ 3963 Heap Partition(贪心)
题意构造二叉树,保证父节点的编号小于子节点且父节点的值小于子节点 求最少的二叉树个数,输出每棵二叉树思路对于当前的每个值,找到之前刚好小于等于他的值(upper_bound找到第一个大于x的位置),作为子节点,因为可能出现重复的值而且子节点个数只有两个,处理比较复杂代码#include <bits/stdc++.h>#define sc(a) scanf("%d",&a)#define mem原创 2017-04-24 13:20:55 · 974 阅读 · 0 评论