
思维
文章平均质量分 72
kk303
这个作者很懒,什么都没留下…
展开
-
HNOJ - 121580 纯思维题...
题目的意思就是一个金额..并给出每个人可以获得得最大额...问怎么分配能最平均...其中题目有指出...数字大的尽量要多分配...数字一样大的..序列在前的多分配... 今天湖大网赛的一道题...一上来就水掉了...觉得思维也不够严谨~~~但就是这样过了...我的思路就是原创 2011-09-04 17:00:19 · 2173 阅读 · 0 评论 -
HDOJ - 3555 不会按位DP的做法
今天做的一套去年WHU出的多校联合题...这道题纠结了好久才挤出来....去网上搜了下...大牛们似乎都是用的高端的按位DP...我等小菜就只能做屎的想赖推了.... 首先将每个位的表打出来...例如sum[3][1]代表100以下的有多少个包含49的数...sum[5原创 2011-08-23 20:49:36 · 787 阅读 · 1 评论 -
POJ1029 & POJ1013 - 找哪个是假硬币...思维
这道题就是说有N个硬币....其中有一个硬币是假币(不知道是比真币重还是轻)....然后给出K个大小关系....要我们来判断哪个是假币或者判断不出输出0.... 我的主要思想就是....有不等关系...肯定两边就有假币存在...那么假币出现的个数就一定等于不等关系的个原创 2011-09-05 09:46:55 · 2606 阅读 · 0 评论 -
POJ 1469 - 排列组合的思维..
题意就是说给一列序列...其顺序是 1 : a .. 2 : b ... 26 : z ... 27 : ab..28 : ac.....51 : az...52 : bc...类似这样...其中的字符串都是每一位比前一位大...最长为vwxyz...给出一个字符串..求原创 2011-09-18 11:50:30 · 1060 阅读 · 0 评论 -
The 36th ACM/ICPC Asia Regional Beijing Site Online Contest - B_Eliminate Witches!
这道题很水...人名顺序就是输入字符串从左到右的顺序...边的话用一个栈来维护就行了...读入名字的时候就并将这个点与栈顶做一条边 ( 根的时候特判 )然后将这个点压入栈.. "," 与 " ) " 时做边并弹一次栈...." ( "的时候不要做处理.....最后将依次得到的边依原创 2011-09-18 21:10:12 · 1504 阅读 · 0 评论 -
USACO Section 1.5 Prime Palindromes - 换个搜索顺序效率会提高不少
这题是要求a..b范围内既是回文数又是质数的数~~~开始我是先找用筛选法筛素数再来判断范围内的素数是否是回文~~在本题跑大数据就很慢~~10S左右~~交上去试试结果直接是爆空间...后来想了一下~~明显的在一个确定范围内素数的数量比回文数的数量多很多...并且回文数可以直接构造..如有一个数 [ 可以直接就构造一个[ ] 或者 [ ? ] ...就给的b最大到10的八次方..但构造回文时因为每次原创 2011-11-14 21:50:24 · 598 阅读 · 0 评论 -
USACO Section 1.5 Superprime Rib - 构造数列
这题直接来枚举再判断显然是效率很低的...我是采取构造的方法...首先将2,3,5,7入队列..然后每次从队头取出一个数..枚举再他后面加1~9后还是不是质数..是的话入队... 当然从队头每次取出一个数后...判断下其位数~~若是等于要求的长度就直接输出了..并且因为构造的时候就保证了其顺序...所以输出顺序也会是满足要求的...Program:/* ID: zzyzz原创 2011-11-14 22:12:02 · 689 阅读 · 0 评论 -
USACO Section 2.1 Sorting A Three_Valued Sequence - 应该有更好的方法
题目的意思是有一列数只由1,2,3组成~~~需要咱们将1放在一起排在最前面~~~2放在一起排在中间~~~3放在一起放后面~~问对于这个数列最少要进行多少次交换... 我的方法是先统计1,2,3的个数~~那么就可以知道1,2,3分辨该放在哪个区域~~ 首先将1都放到该放的位置~~其所需步数就是找2~3的区域中1的个数~~然后再看1这个区域里有多少个2可以直接和2区域的交换~~有多原创 2011-11-16 10:56:27 · 892 阅读 · 0 评论 -
队内赛一个有意思的题
这道题理解不难~~但过程需要仔细思考..代码也简单... 首先看如果一直蜗牛每半小时上升为10下降为20但坑的高度只有10那蜗牛照样可以一次性出去...以这种思路看如果是 10 9 5 这种数据...蜗牛在一天过后的位置将是4然后第二天就能出去了....(注意绝不是10/(9-5)向上取整=3 而是2天就能出去) 如果蜗牛爬啊爬...某一天结束爬到了>=h-i 的位置那原创 2011-10-30 03:04:46 · 1627 阅读 · 1 评论 -
USACO Section 2.1 Hamming Codes - 题意相当坑爹..很无聊..
就算AC了我也弄不明白输入里的B到底是要干啥~~我的程序除了输入就没用上过~~还有题意里局的那个例子更是误导人...直接举个十进制的不好非要搞奇怪的数字表示方法..题目中又根本没关系... 回到题目中..其实意思就是说要找N个10进制数..使两两之间的二进制相异位数不小于D(如0与7分别用二进制是000..111 相差的是3)..并且使得这个N个数从第一数开始比较是最小的..(如找到0原创 2011-11-20 21:09:56 · 1192 阅读 · 0 评论 -
USACO Section 2.2 Party Lamps - 看清本质就简单!
这题乍一看吓一跳...范围挺大的...想了也有一个小时才想通...看清本质!! 总共就4个按钮...如果我1,2,3,4都按过一次了..再按一下1 or 2 or 3 or 4灯的情况不和只按了2,3,4 or 1,3,4 or 1,2,4 or 1,2,3一样吗?因为一个按钮按两次就相当于没按..那么实际上能出现的最多情况也就是C(1,4)+C(2,4)+C(3,4)+C(4,4)=原创 2011-11-21 22:44:47 · 1102 阅读 · 0 评论 -
USACO Section 2.2 Runaround Numbers - 又一个枚举的思想
题目说的这种数长度最多为9,每位都不重复..并且没有0..所以如果事先枚举所有这些数再判断的话需要枚举的个数是9!=362880...才30多W~~果断先枚举出可能的所有情况~~就按题目要求的判断下~~枚举的同时就能保证是有序的~~所以后来的查找输出就从1开始找到第一个大于输入的数就ok了...Program:/* ID: zzyzzy12 LANG: C++ TASK:原创 2011-11-23 22:24:38 · 715 阅读 · 0 评论 -
USACO Section 2.2 Preface Numbering - 题目只是自始自终没太懂..
题目真心没看懂...后来是看了翻译都没懂....最后看了别人的分析..说每位单独的看再组合就ok了...但我也没懂..但真的很乱了...好吧..我就按那个思路做了一次码农...Program:/* ID: zzyzzy12 LANG: C++ TASK: preface*/ #include #include #include #inc原创 2011-11-24 21:40:07 · 999 阅读 · 0 评论 -
USACO Section 2.3 The Longest Prefix - 一点点DP思想
题目的意思是给出好一些单词...再给一个长串(多行的接成一行)..问由这些单词一个一个接着一个(可重复)最长能组成所给字符串的前缀... 有点01背包的思想...用一个bool数组来记录字符串的某个位置能否被拓展到..并且在更新拓展位置时同样也是以前面已经拓展的点来看后面(枚举所有的单词,看能拓展到后面那哪些点)..因为所给的单词最长也就10..所以总的来看这种方法效率还是可以接受了.原创 2011-11-28 13:55:49 · 1329 阅读 · 0 评论 -
USACO Section 2.3 Controlling Companies - 题意要理解清楚..
开始我对于第三条的理解是可以传递更新的..比如说A掌控B..B掌控C..而这时发现C可以掌控D..那么D的股权要加给A,B,C...但一个是不好写...再一个是时间效率差..交上去还WA了..还好USACO提供了数据...根据出错的数据..才发现题目的这个传递没有这种关系..就向前面的例子..只有C要加上D的股权... 这样就好写了..并且可以用队列来提高效率..因为只有更新过某点的值~原创 2011-11-30 19:57:53 · 1883 阅读 · 0 评论 -
USACO Section 2.4 Fractions to Decimals - 思维不要局限..问题想简单点..
开始这题我是想到的是以前奥数学的那种把循环小数化分数的...那么分母就应该是(99...00)的形式..既然如此..那么找到能被分母整除的最小(99...00)...然后再算出对应的分子..再展开成循环小数...真的很eggache阿...写了一大段..结果都没调出来.. 再一想..其实这题只要手动模拟做除法..每次记下除数和余数..再找到有相同余数的就可以了~~而且题目所给的范围原创 2011-12-01 10:32:54 · 1483 阅读 · 0 评论 -
USACO Section 1.3 Calf Flac - 简单的字符串处理
继续切...这题就是求最长的回文串(忽略奇怪符号..只保留字母,并且不考虑大小写)...枚举中间点..以奇数和偶数的两种情况来搜就可以了...恶心的是有多行..并且多行之间也可以是回文...那就在读的时候将他们都存在一个字符串里..但是' \n ' 也要跟着一起存~~Program:/* ID: zzyzzy12 LANG: C++ TASK: calfflac*/ #incl原创 2011-11-10 22:34:50 · 1021 阅读 · 0 评论 -
USACO Section 3.1 Humble Numbers - 在朴素的算法中找到优化~我吐了...
光荣霸气的提交22次才过...并且最后AC的思路还是我要崩溃了去网上搜得别人思路...先头我用各种方法都试了..双向链表..优先队列...甚至是150多行的AVL..这题我整整用了两天..码代码超过8个小时...才通过别人的思路给AC... 那就总结一下这个AC思维...其实也是从最简单的基础上优化的..最简单的思维是当确定了K-1个数时..用这K-1个数与给出的N个素数做积~~找到比K原创 2011-12-07 22:15:50 · 929 阅读 · 0 评论 -
USACO Section 3.1 Shaping Regions - 矩阵切割..
开始听对里的大大说这是二维线段树..没敢写..后来再一想..数据范围N 就让他这么切..为了防止一些切出来不满足要求或者切出来面积为0没有意义的区域..那么就在递归的时候加个判断.看当前的矩形是否是合法的..也就是lx Program:/* ID: zzyzzy12 LANG: C++ TASK: rect1*/ #include原创 2011-12-12 16:25:49 · 1409 阅读 · 0 评论 -
USACO Section 3.2 Factorials - 高精度模拟~
应改有更科学的方法吧~~我就是纯高精度了~~稍微估计了一下~~只做到1000位~~每次加进来都吧后缀0去掉~~最终输出第一位就ok了~~Program:/* ID: zzyzzy12 LANG: C++ TASK: fact4*/ #include #include#include #include #include #inclu原创 2011-12-13 10:48:55 · 715 阅读 · 0 评论 -
POJ 1363 - 模拟栈操作的水题..
USACO又卡住了T_T...好郁闷...找了到水题来娱乐娱乐.. 这题就是说输入的顺序是1~N..然后有一个栈可以用..问能否得到所给的输出顺序...直接模拟栈的操作..从1开始做到N为止..每来一个数先放入栈顶..如果栈顶的数等于当前输出队列的指针位置的数(这个指针初始位置为1)..那么弹栈并且移动输出队列的指针(往后移一位,既++)直到输出队列指针位置的数与栈顶的数不相等~~1~N原创 2012-01-15 23:52:10 · 3348 阅读 · 0 评论 -
USACO Section 4.4 Pollutant Control - 找更优的搜索枚举方案~
首先最原始的方法就是不断地枚举要去掉的边~~直到从1出发到不了N...中间可以用个优化...若所去掉的边代价和大于前面找到的解..那么就剪掉...开始我确实这么写了..前几个没错..但效率很捉急啊.... 再在这个方向想...因为每次去掉一条边后..都要从起点开始进行此搜索..能到达终点才继续往下搜..何不把这个搜索过程利用起来...于是我就把每次搜索找到的路径记录下来...而去掉的边总原创 2012-01-22 15:21:07 · 1089 阅读 · 0 评论 -
USACO Section 4.4 Shuttle Puzzle - Hash都不用的DFS水题..
龙年第一题~~~这题开始以为搜索会超时~~要用构造才行~~我这找了好久规律~~也没找出构造的方法~~~就写搜索了... 搜索的时候要注意方法和顺序...显然的是W只能往右移..B只能往左移~~否则不可能得到最小步数的解~~然后也能想到的其实只要每次都保证了W右移,B左移~~最小总步数一开始就是确定的...而如果在移的时候先尝试WB_ -> _BW...再尝试W_ -> _W 再尝试_B原创 2012-01-23 12:53:20 · 1421 阅读 · 3 评论 -
USACO Section 5.1 Musical Themes - 题目转换以及KMP..
先写了一个N^3的裸搜试了试~~结果还过了12个点~~囧...然后就想起优化...主要思想是要利用前面已经搜索过的..尽量减少重复的判断搜索...根据这些特征自然而然的想到了KMP...但由于题目中是要求两列每位对应差相等而不是说两列完全相等...所以写了一晚上搞得十分蛋疼..还是搞不出来... 再看了下样例..发现题目可以转化!!! 其实差了一个自然数的两列..若写成相邻前后之差的形原创 2012-01-26 04:07:32 · 945 阅读 · 0 评论 -
USACO Section 5.2 Electric Fences - 有意思的枚举+计算几何
这题一上来首先想到的是能否用数学方法来求得这个点..比如说画一个半径最小的圆使其与所有线段相交或相切…那么圆心就是所求..想法似乎没问题..但怎么来求是毫无头绪~想了良久也没想出用数学的方法如何实现… 还是用枚举了…题目范围不大..并且精度要求不高..将整个( 0 , 0 ) ~ ( 100 ,100 ) 的连续空间离散分成1000个每个相距0.1的点..枚举每个点..定能找到答案.原创 2012-01-28 12:33:52 · 1376 阅读 · 0 评论 -
USACO Section 5.3 Window Area - 又一矩形覆盖问题
最重要的问题..如何确定这些矩形的重叠层次顺序...我通过给每个矩形一个权值来表示当前矩形的优先级..只有当这个矩形某区域上有重合部分的矩形优先级都比这个矩形低..这个区域才说是从正面可以看到的面积...而这个优先级的操作: 用maxn表示当前优先级的最大值...用minn表示当前优先级的最小值..maxn与minn的初始值都为0.. 当输入一个矩形..按题目的要求原创 2012-01-31 23:43:05 · 1667 阅读 · 0 评论 -
USACO Section 3.3 Home on the Range - 优化的BFS..
USACO 的数据也有很弱的阿..开始我的程序有个地方完全错了居然过了3个点... 我的思维: 首先很容易想到如果我能知道(x,y)为左上角边长为 t 的正方形满足条件(全为1)....那么我只要再扫下最右边的t+1个和最下面的t+1个就能知道(x,y)为左上角边长为 t +1的正方形是否还是满足全是1的要求..如果我能知道(x,y)为左上角边长为 t 的的正方形不满足条件(不全原创 2012-01-03 22:34:09 · 710 阅读 · 0 评论 -
USACO Section 3.4 American Heritage - 知道前序遍历与中序遍历求后序遍历
这道题主要就是要抓住前序遍历和中序遍历的特点...前序便利是(自己,左孩子,右孩子)..中序便利是(左孩子,自己,右孩子)...而要求的后序遍历是(左孩子,右孩子,自己).. 若是在中序遍历从左到右的顺序中..先跳过中间的自己...后面某个位置再把自己计回来..那应该能得到后序遍历...而在前序遍历中一个点的孩子肯定在其右边...所以两者结合起来一起直接就推出后序遍历.. 这原创 2012-01-04 12:35:53 · 927 阅读 · 0 评论 -
POJ - 1730 注意看题..精度要留意..
这题首先切入点要对..最大的是2^32..可见最大的是32次方数...所以从32开始判断查找符合条件的直到1...那么就先pow(n,1.0/k)得到这个数开了k次方后的大致位置..然后再取整pow(m,k)给回来(取整的时候注意是四舍五入.所以不能直接用(int)...)..若误差很小..则是答案.. 但要注意的是给的数可能是负数..对于负数的处理..首先负数不可能是某个数的偶次方原创 2012-02-13 22:49:26 · 654 阅读 · 0 评论 -
POJ - 3982 - 高精度~滚动数组..
第一眼看~~矩阵乘法~~再看范围~~根本不需要~~~直接高精度做到99就ok了...当然可以开99个数组来存99个高精度数...但每个数只与其前面的三个数有关..所以我是用的滚动数组...如A3就覆盖了A0..A4覆盖了A1..A5覆盖了A2..A6覆盖了A0........#include#include#include#include#define oo 2000000原创 2012-02-14 19:01:54 · 778 阅读 · 0 评论 -
POJ 2033 - DP..考虑要完全..
很明显的动态规划...dp[i]的状态等于dp[i-1] 或者 等于 dp[i-1]+dp[i-2] 或者等于 dp[i-2] ... 关键的就是注意号细节... 1 . dp [ i - 1 ] 能转移过来的条件是 s [ i ] 非0... 2. dp [ i - 2 ] 能转移过来的条件是 s[ i -1 ] *10 + s[ i ] 在[ 10 , 26 ]原创 2012-02-15 23:47:32 · 1042 阅读 · 0 评论 -
POJ - 2478 欧拉函数..
没看离散数学阿...开始根本不知道有个专门的欧拉函数..还用了各种方法..若是暴力一个个搜..1000的数据就爆~~..若用其他的方法..比如说找出一个数的质因数..然后再来凑有多少要排除的项..结果太繁琐..还是看了discuss才了解了下欧拉函数..不明白证明..只是知道了怎么来用....以后碰到类似的问题可以直接拿来做公式用... http://baike.baidu.com/v原创 2012-02-26 14:55:43 · 807 阅读 · 0 评论 -
POJ - 1597 英语阅读题..
这道题通过率也有47%了~~就是题目长了~~以前总是跳过去~~今天仔细来看~~很简单了~~具体的来说题意是给出x,y..问x的倍数%y..能否得到0~y-1的所有数...求一次最大公约数就好了... 还有这题容易PE...注意输出时两个数字都是留10个位置..Good/Bad Choise前面是4个空格...每次输出要空一行空白...Program:#include原创 2012-02-20 10:53:44 · 1000 阅读 · 0 评论 -
POJ-2559 维护单调栈.细节阿细节
这题意思很简单...就是给一排并列宽为1,长度输入数据的图像..问能找到的最大矩形面积是多大... 思路也很简单...基本框架是: 从一边做到另一边..维护一个单调的栈..栈顶的矩形边最长..栈底的最短...当前扫到某个位置的矩形..就判断弹栈..直道栈顶的矩形长小于等于当前矩形.. 但是..细节阿...首先...不是从一边做到另一边就完了..还要从另一边再做回来~~要原创 2012-02-29 23:30:21 · 1062 阅读 · 0 评论 -
POJ-3481 维护单调链表
其实链表还是用动态的做才正宗...偷懒了..用静态的了..就是好多细节要注意..比如啥时候算是空栈...当前插入的client若在队头或者队尾..反正我就是一堆if else~~Program:#include#include#include#include#include#includeusing namespace std; struct node{ in原创 2012-03-04 22:29:19 · 942 阅读 · 0 评论 -
POJ-2803 英文阅读+字符串处理
这题主要是有点恶心...直得留意的是题目中提到的..前缀和后缀只会出现一次...还有就是前缀为re时的处理..应该是最后才加again...所以这使得程序不能边递归判断,边输出..那么先确定当前单词的类型,(前缀是哪个...后缀是哪个)..并且将这个单词去掉前缀后缀给还原..然后再按题目要求输出..关于砍掉前面一部分..我是 strcpy(s,s+k); 关于减原创 2012-03-10 23:22:54 · 846 阅读 · 0 评论 -
HDOJ-1992 构造递推..
找当前项和前几项的关系...思维要严谨~~把所有情况考虑进去...具体看程序.~Program:#include#include#includeusing namespace std;int t,n,s[40],i,j,T;int main(){ freopen("input.txt","r",stdin); freopen("output.原创 2012-03-17 14:39:08 · 1074 阅读 · 0 评论 -
HDOJ-1042 大数处理时的更优方法
大数处理..目前来看..为了能应付每一位相互做乘法不越界同时又确保每一位被尽可能的使用..一位存4位数最优..其次..在运算范围比较大时候..当且大数的长度还是带着跑吧~Program:#includeusing namespace std;int s[10005],i,j,n,k;int main(){ while (~scanf("%d",&n))原创 2012-03-19 18:15:24 · 1275 阅读 · 1 评论 -
错排的递推公式及推导
嘻嘻~~~刚用电脑的Photoshop做出来 f(n)=(n-1)*(f(n-2)+f(n-1));颜书先生《“装错信封问题”的数学模型与求解》一文(见《数学通报》 2000 年第 6 期 p.35 ),给出了该经典问题的一个模型和求解公式:编号为 1 , 2 ,……, n 的 n 个元素排成一列,若每个元素所处位置的序号都与它的编号不同,则称这个排列为转载 2012-03-20 11:37:25 · 4956 阅读 · 1 评论 -
HDOJ-1271 换个思维就简单多了...
老早就尝试过这题..结果枚举方式不是很简洁...写起来各种蛋疼..昨晚听了惊奇哥的讲解就果断水了... 设B=Bn,Bn-1,...B2,B1 枚举是再哪个位置插入了个位数k...比如枚举是第i位后面插入了个位数k..那么得到的 N=11*(Bn,Bn-1,...Bk+1)*(10^(i+1))+k*(10^i)+2*(Bk-1原创 2012-04-14 09:46:35 · 1184 阅读 · 0 评论