math&algorithm&oj
ChineseYjh
这个作者很懒,什么都没留下…
展开
-
威佐夫博弈问题详解链接及个人啰嗦补充
链接:百度百科的定理阐述个人补充:(1)a[k]是递增的。证明:对于k>0,首先a[k]不等于a[i],i=0,1,...,k-1。其次,若存在k使得,a[k]<a[k-1],则a[k]<a[k-1]+k-1=b[k-1],所以a[k]亦是a[k-1]前未出现过得最小自然数,而这是a[k-1]的定义,故而二者相等,矛盾。所以,必有a[k]>a[k-1]。(2)任何自然数都在...原创 2018-05-29 16:05:17 · 338 阅读 · 0 评论 -
在一堆硬币中用最少的次数称出质量不同(可轻可重)的假币
根据题意,我们设最少的次数为n,则这n次测量的结果每次有<,>,=三种情况,故而总共可以代表3^n个情况。我们设假币有x个,并且从1开始编号。注意到如果对于每种情况称法步骤相同(就是称量规则相同),那么每个情况应该唯一确定假币的编号,而显然每个编号下的假币称量情况只会有一种,那么二者建立一一映射。更进一步,问题转化为求最小的n,使得n位三进制数能一一映射地编码x种假币情况。那么就是3^...原创 2018-05-29 16:01:21 · 1882 阅读 · 0 评论 -
关于oj中多样例输入的几点注意事项
前言:多样例输入是指一个文件中有多个样例对程序进行测试。往往是以先告诉我测试样例的数目或者告诉我文件输入结束的标志的事件为标志。1. 记住每个样例的数据一定要被更新,最好不要有上一个示例的数据残余。比如读取字符串时最好每次都完全更新而不会因为这次输入比上次输入短而使得字符串末尾有上次输入的残余。所以检查的时候,一定要看那种每次循环(测试每个样例)都应该更新的变量是否被更新。2. 有时候读取样例时读...原创 2018-07-09 12:15:30 · 3429 阅读 · 0 评论 -
UVa202:输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。
做这题我经历了几个痛苦的阶段:(1)因为初始数组开的太小,导致当要存的数过多时覆盖掉了其他内容导致莫名其妙的错误(比如数组a加一个元素导致a中实际没有加而在b中覆盖掉了一个元素)。(2)格式问题。因为题目没有说清楚,试了多次才ac。以后看输出示例要注意这一点。(3)关于整除时的处理。因为考虑到分子为零的示例导致整除时的输出多了一个0(比如20/4 = 5.0(0))。#include<std...原创 2018-07-09 20:58:36 · 1420 阅读 · 0 评论 -
UVa1587:给定6个矩形的长和宽w i 和h i (1≤w i ,h i ≤1000),判断它们能否构成长方体的6个面。
思路:先通过枚举确定这六组长宽对是两两相同的。在判定过程中,将对应的(去重后的)的长宽对记录下来形成由(a,b)(b,c)(c,a)组成的数组log。然后log[0]和log[1]设为a和b,于是确定2~3之间有一个a或者b,对应的4~5有b或者a,并且记录它们的位置为i,j。最后,枚举2~5把位置不为i和j的元素(两个)填充到log[0]和log[1]中,仅仅当二者相同时,才可以认为possib...原创 2018-07-10 14:03:25 · 2684 阅读 · 0 评论 -
UVaoj 213:解码程序
传送门:题目链接思路:做一个循环,每个循环都包含一下几步: 第一步,就是用自己写的my_getline获取文件的一行header(为什么自己写?因为在联系C不想用C++而且gets不安全再者输入有空格等),其中要注意:获取一行字符串结束时要在对应地址末尾加上'\0'作为结束符;而结束获取的标志有EOF,'\n','\r'三者。 第二步,处理header和二进制数(msg)的关系。这里注...原创 2018-07-11 21:35:49 · 382 阅读 · 0 评论 -
UVa839:佛系建树与数据更新
题目链接传送门思路:1. 首先题目的输入是先序递归的,那么首个问题就是是否要建树,如何建树,怎么存树。更具体一点,如何知道这棵树建好了。输入只告诉我们总共有几棵树(几个天平),每棵树的构造指令作为一块用一个空行与其他指令隔开。所以首先就想到用string搭配stringstream来输入。但是细想输入数据是怎么确定这棵树建造好了呢?我们考查其建树规则:发现一旦有一个0,就要在相应的方向(左...原创 2018-07-23 15:53:58 · 410 阅读 · 0 评论 -
用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要 求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。
思路:注意到ghi是abc的三倍,所以abc的范围就是123到329之间,故而遍历[123,329]中的所有整数,然后每个整数算出对应的def和ghi,然后可以建立一个hash表,将abcdefghi存入其中(比如位置即该位的数值),如果出现冲突,说明一个数字用了两边,舍弃该条件;否则,可以输出答案。C语言实现如下:#include<stdio.h>#include<math....原创 2018-07-05 20:32:13 · 2333 阅读 · 0 评论 -
用字典序来生成数组的全排列
思路:为了使用非递归的方法生成全排列,我们想将所有排列与另外一个有序序列产生一一对应,这样在循环下就可以完成它们的枚举。于是考虑到用字典序来反应有序性。其实也就是将每个排列对应与一个N进制数罢了(N为数组的元素个数)。那么第一步就是将所给数组按升序排列,然后逐个输出字典序大于目前数组字典序的最小的数组排列。那么如何逐个输出字典序大于目前数组字典序的最小的数组排列呢?我们肯定是尽量少重排前面的位而多...原创 2018-07-06 11:28:09 · 1648 阅读 · 0 评论