欢迎辞

欢迎来到“笃志以砺,决起而飞”!
如果您是第一次来到本站,建议访问本站导读以便更快地了解本站。
如果您喜欢本站,欢迎订阅

 

2012 年二月
« 一  
 12345
6789101112
13141516171819
20212223242526
272829 

链表结构原理 与 数组模拟链表 的应用

链表(chain table)是我们最常使用的一种数据结构。在信息学竞赛中,经常需要使用链表作为遍历等操作使用的数据结构参与解题过程。这是因为链表具有自己的优点。用数组模拟链表,可以简化链表的使用,从而使链表更好的为我们服务。如果您已经知道链表数据结构的原理,可以跳过第一部分直接查看与数组模拟链表有关的内容。

[...]

4-12 最新计划

写模拟赛剩余题目和POI动态规划题目。

POI n-k集的数目 LIC The number of n-k-special sets 题目

n-k集的数目LIC 我们称一个自然数集合X为一个n-k集,如果它具有如下性质: 1.对于X中的每一个元素x有1 <=x <= n; 2. X中的所有元素之和均大于k; 3. X中不包括连续自然数。 任务: 请写一个程序: 在文本文件LIC.IN中读入两个整数n和k; 计算所有不同的n-k集的数目; 将结果输出到文本文件LIC.OUT中。 输入格式: 在文本文件LIC.IN中的第一行包括两个由空格分开的整数n和k,1  n  100,0  k  400。 输出格式: 你应该在文本文件LIC.OUT的第一行中输出一个非负整数,为所有不同的n-k集的数目。 样例: 输入(LIC.IN): 5 6 输出(LIC.OUT): 3

POI Sum of one-sequence 连续串之和 解题报告

本解题报告的版权归 Ceeji 所有,转载请注明出处并保留本注释。 题目描述 我们定义连续串为一串整数,它的第一个元素为0,并且任两个相邻元素之差的绝对值为1。更精确的说,如果[a1, a2, …, an]为一个连续串,那么有: 对于任意的1<=ka1=0 任务: 写一个程序: 在文件SUM.IN中读入连续串的长度和连续串中所有元素的和; 找出一个给定长度的连续串,使其所有元素的和与给定的和相等,或者指出这样的连续串不存在。 将结果输出到文件SUM.OUT中。 输入格式: 在文本文件SUM.IN的第一行有一个整数n,满足1n10000,表示连续串中元素的个数。第二行为一个整数S,满足|S|<=50000000,表示连续串中所有元素之和。 输出格式: 如果能够找到满足条件的连续串,你应当在文本文件SUM.OUT的前n行输出n个整数(每行一个),表示连续串中的各个元素(第k个元素输出在第k行)。否则,文件应该只包含一个单词NIE(为波兰语的“否”)。 样例: 输入(SUM.IN): 8 4 输出(SUM.OUT): 0 1 2 1 0 -1 0 1

思路分析 本解题报告的版权归 Ceeji 所有,转载请注明出处并保留本注释。 本题采用构造法。时间复杂度O(n),空间复杂度O(n)。先建立一个从0到n-1的数列,并求出要求的和与数列的和的差值。如果差值为奇数则无解,如 差值为偶数,则逐渐减小差值。比如将最后一位改为降序,则差值减小2,倒数第二位改为降序则差值减小4,以此类推。可以先从前面减,减到很小的时候(不能 再减)再从右面减。所谓减就是把这一位改为上一位减一,而保持后面的升序。

完整代码

  //By Ceeji  //Date: 2009-4-10  //Type: Gouzao  //HAOI test 1 - Problem 1 : sum (POI)  //State : Accepted  Program sum;  Const     inf=’sum.in’;     ouf=’sum.out’;     maxn=10000;  Var     n,s,i,j,l:longint;     x:longint;     q:qword;     b:array[1..maxn]of boolean;  [...]

POI 9904 Polygons 解题报告

本解题报告非本人原创,程序为本人原创。转载请注明出处并保留本注释。 题目描述 Polygons 两个做游戏的人在玩一种多边形游戏。一个有n个顶点的凸多边形需要由 n-3条对角线划分成n-2个三角形。这些对角线只会相交在顶点。划分后的三角形中有一个是黑色的,其余的都是白色。两个选手轮流取,每一个选手每一次要从多边形中切下一个三角形。每个选手只允许沿着一条对角线切下一个三角形。切下黑色三角形的选手获得比赛的胜利。 注意:我们称一个多边形是凸多边形当且仅当任意两个顶点的连线都被包含在多边形的内部。

任务:编写程序, 1、从文本文件gra.in中读入关于凸多边形的描述。 2、判断是否先取的选手有一种必胜的策略。 3、将结果写入文件gra.out。

输入: 输入文件gra.in的第一行包含一个整数n,4 <= n <= 50000,表示多边形的顶点数。顶点按顺时针编号为0至n-1。 以下的n-2行描述该多变形划分成的三角形。第i+1行(1≤i≤n-2)包含三个非负整数,表示第i个三角形的三个顶点的编号。第一个描述的三角形是黑色的。

输出: 输出文件gra.out包含一个单词: ‘TAK’(在波兰文中表示“是”),如果先走的选手有必胜策略。 ‘NIE’(在波兰文中表示“否”),如果先走的选手没有必胜策略。

样例输入: 6 0 1 2 2 4 3 4 2 0 0 5 4

样例输出: TAK

《Polygons》解题报告 一、分析。 为了描述方便,我们用三角形的三个顶点的编号来表示三角形,如下图中的黑色三角形为(1,3,6)。 在 下图中,要切下黑色三角形(1,3,6),就必须切下三角形集合{(0,1,6)},{(1,2,3)},{(3,5,6),(3,4,5)}中的两个。 同样,对于任何一个凸多边形,要切下黑色三角形都必须切下三个三角形集合中的两个。切下一个三角形集合所需的步数是一定的,而与切的顺序无关,所以对于任 何一个三角形集合中我们只需考虑集合中三角形的个数而不必考虑分别是哪几个三角形。 设三个三角形集合的元素个数分别为a,b,c。下面的问题就是如何从状态(a,b,c)判断是否有必胜状态。 先分析必胜状态,首先(0,0,1)一定是必胜状态。若初始状态不是(0,0,n)则状态(0,0,c),c>1,实际是不可能出现的。 证明:(1)、状态(0,0,n)不存在。 (2)、若(0,0,c)n>=c>=2不存在,由于(0,0,c-1)只能从(0,0,c)和(0,1,c-1)中得到。 状态(0,0,c)不存在,而从(0,1,c-1)出发可以得到比(0,0,c-1)更优的(0,1,c-2),所以不可能选择(0,0,c-1)。 因此,若状态(0,0,(0,0,c-1)也不存在。 所以(0,0,c),c>1不存在,则(0,0,c-1)也是不存在的。 ∴ 若初始状态不是(0,0,n),则不可能出现(0,0,c),c>1。因此必胜状态只有一个(0,0,1)。 接 着,分析状态(a,b,c),a≠0,令s=a+b+c,称s为奇数的状态为奇状态,s为偶数的状态为偶状态。由于每一步只能将a,b,c中的一个数减 [...]

第 1 页,共 2 页12