随笔分类 -  题解

题解
摘要:这题值得好好探讨一下,因为其中的算法真的很巧妙,不过我也说不太清楚。 设l, r是最长NUM序列的左右坐标,r-l+1就是NUM序列的长度,开始一直读入,r不断的增加,当1-m的所有数字都出现后,就开始边循环边判断,如果num[l]出现了两次就可以把l向右移动了,大致的思路就是这样,看看代码吧:#include <stdio.h>#include <string.h>#include <stdlib.h>int used[200001];int num[200000];int l, r;int main(int argc, char **argv){ int 阅读全文
posted @ 2011-07-02 10:29 zqynux 阅读(260) 评论(0) 推荐(0)
摘要:简单的模拟吧,注意事项还是有一点的,没什么特别好说的- -。#include <stdio.h>#include <stdlib.h>int main(int argc, char **argv){ int i, a; int have = 0; int save = 0; for(i = 1; i <= 12; i++){ scanf("%d", &a); have = have + 300 - a; if(have < 0){ printf("-%d\n", i); return 0; } save += 阅读全文
posted @ 2011-07-01 20:52 zqynux 阅读(890) 评论(0) 推荐(0)
摘要:看到了觉得无法下手啊!但是看了题解就知道了(是废话不~濮~)。 设p[i]是第i个请求的地方,那么根据题意能够知道在完成第i个请求之前,三个人有一个是在p[i - 1],而且也可以知道完成第i个请求后,有一个人在p[i]上。设完成第i请求之前(未完成)三个人的位置分别是x,y,p[i-1],那么完成请求后就会有三种情况,x前往p[i],三个人的坐标变成y,p[i-1],p[i];或者y前往p[i],三个人的坐标变成x,p[i - 1], p[i];或者p[i - 1]前往p[i],变成:x,y,p[i]。 自然有下面的方程:f[i][x][y] = f[i - 1][x][y] + map[. 阅读全文
posted @ 2011-07-01 20:04 zqynux 阅读(286) 评论(0) 推荐(0)
摘要:考的是动态规划的状态压缩吧,两个石子之间的距离若大于100就变成100,就压缩下来了。然后方程是f[i] = min{f[i - j]} + map[i]; 代码:#include <stdio.h>#include <stdlib.h>int map[10101];int f[10101];int stone[101];int com(const void *a, const void *b){ return *(int *)a - *(int *)b;}int main(int argc, char **argv){ int i, j; int s, t, min; 阅读全文
posted @ 2011-06-27 12:27 zqynux 阅读(264) 评论(0) 推荐(0)
摘要:这题网上的各个题库都不完整,完整的我发一次:题目的原描述如下,rqnoj和vijos的题目都不完全,少了一幅图片,表格也不清晰。。【问题描述】我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中j为1到n中的某个数字,为工件号;k为1到m中的某个数字,为工序号,例如2-4表示第2个工件第4道工序的这个操作。在本题中,我们还给定对于各操作的一个安排顺序。例如,当n=3,m=2时,“1-1,1-2,2-1,3-1,3-2,2-2”就是一个给定的安排顺序. 阅读全文
posted @ 2011-06-27 12:19 zqynux 阅读(971) 评论(1) 推荐(1)
摘要:这题好像是某届NOIP的原题,我用的简单DP,因为主件最多两个子件,所以没什么考虑的,多判断几次,但是这代码太猥琐了,写的我一头的汗。不过还好,一次AC!================================华丽的分割线================================#include <stdio.h>#include <stdlib.h>struct thing{ int p, i; int len; int sub[2];}thing[60];int end;int f[32001];int main(int argc, char **ar 阅读全文
posted @ 2011-06-24 22:52 zqynux 阅读(241) 评论(0) 推荐(0)
摘要:是某某年的NOIP原题吧,题目的思路如下: f[i]是1~i的最长上升序列,g[i]代表从后到前的最长上升序列,然后枚举每个i,求n-max{f[i] + g[i] - 1},就是答案。================================华丽的分割线================================#include <stdio.h>#include <stdlib.h>int f1[100], f2[100], num[100];int ans;int main(int argc, char **argv){ int n; int i, j; 阅读全文
posted @ 2011-06-23 22:33 zqynux 阅读(454) 评论(0) 推荐(0)
摘要:111. Very simple problem每个测试点时间限制: 0.50 sec.每个测试点内存限制: 4096 KB给你一个自然数X,输出平方小于或等于X的最大整数。输入输入包含一个自然数 X (1≤X≤101000).输出输出答案样例输入16样例输出4================================华丽的分割线================================ 第一眼,觉得是个水题,看了数据范围发现暴难! 我的第一个做法是,网上看到的一个:用X减1,再-3,再-5,再-7,再-2k-1,到小于0,输出K-1。 最开始觉得不行,后来试了一下,发现:1=1= 阅读全文
posted @ 2011-06-12 19:46 zqynux 阅读(707) 评论(0) 推荐(0)
摘要:110. Dungeon每个测试点时间限制: 1 sec. 每个测试点内存限制: 4096 KB太空探险家的任务是在在M星球上发现地牢。地牢的大厅是一个充满光亮的球面。探险家们发现光线在球面上反射准寻一个普遍的定律(入射角等于出射角,入射光线,反射光线和垂直反射面的线(译者:也许是法线吧)在同一平面上。)根据一个古老的传说,当光线按照适当的顺序进行反射时,同往装有珍贵的古老的知识的房间的门就会被打开。你不是去猜正确的序列,你的任务要简单得多。你会得到球面的位置和半径,射线被射出的位置和射线被传播的方向,然后你需要找到反射的球面的集合。输入第一行的包含一个整数n (1≤n≤50) - 球面的总数 阅读全文
posted @ 2011-06-11 10:59 zqynux 阅读(463) 评论(1) 推荐(1)
摘要:109. Magic of David Copperfield II每个数据时间限制: 0.50 sec.每个数据内存限制: 4096 KB著名的魔术师大卫科波菲尔喜欢表演下面的魔术:一个N行N列不同图片的矩阵出现在大屏幕上,我们给所有的图片这样命名:12...N............N*(N-1)+1N*(N-1)+2...N*N每一个参与的观众被要求将手指放在左上方的图片上(即编号为1的图片),魔术师开始了:魔术师告诉观众在图片上移动k次(移动是把手指放到上下左右相邻的图片上,如果那儿有图片的话),然后他(魔术师)的手微微一指(指向一些图片)并说:“你不在这里”,然后……是真的!你的手指 阅读全文
posted @ 2011-06-10 18:17 zqynux 阅读(393) 评论(0) 推荐(0)
摘要:108. Self-numbers 2每个测试点时间限制: 2.50 sec.内存限制: 4096 KB在1949年印度的数学假D.R.Kaprekar发现了一种叫做self-number的经典数字,对于任意正整数n,定义d(n)为n加上n的各个位上的数字(d是数字的意思,Kaprekar发明的一个术语)。如:d(75) = 75 + 7 + 5 = 87。给定任意正整数n,你可以构建出无限的整数递增:n, d(n), d(d(n)), d(d(d(n))), ……举个例子,你从33开始,那么下一个数就是33 + 3 + 3 = 39, 再下一个就是39 + 3 + 9 = 51, 接着就是 阅读全文
posted @ 2011-06-09 12:31 zqynux 阅读(798) 评论(0) 推荐(0)
摘要:107. 987654321 问题每个测试点时间限制: 0.75 sec.每个测试点内存限制: 4096 KB给定一个正书N,你必须得到这样的数的数目,它们的平方最后几位要等于987654321。输入:包含一个整数N (1<=N<=106)输出:打印出题目的结果样例输入8样例输出0================================华丽的分割线================================ 开始连翻译都不知道怎么翻译,感觉英文版的题目没看懂,后来到网上搜了些题解看才看题目。 算是数学的定理之类的把,一个数的平方的最后N位数只取决于那个数的最后N位数。 阅读全文
posted @ 2011-06-08 10:06 zqynux 阅读(689) 评论(0) 推荐(0)
摘要:106. 等式时间限制:0.5s内存限制:4096KB 对于等式ax+by+c=0,给出a,b,c,x1,x2,y1,y2,你必须要确定有多少个满足下面条件的整数对(x,y)存在,x1<=x<=x2,y1<=y<=y2。输入: 包含整数a,b,c,x1,x2,y1,y2,所有数的绝对值都不大于108输出: 输出结果个数。================================华丽的分割线================================ 首先,抱歉,四天前就翻译好了,现在才上交题解!实在没办法啊,好几个原因,第一,个人好奇心太强了!扩展欧几里德算法 阅读全文
posted @ 2011-06-06 21:58 zqynux 阅读(735) 评论(0) 推荐(0)
摘要:105. Div 3每个测试点时间: 0.50 sec.每个测试点内存: 4096 KB 给定集合1, 12, 123, 1234, ..., 12345678910, ... . 给出数字N,你必须确定这个集合前N个数据有多少个能整除3。输入:输入 N (1<=N<=231- 1).输出:题目中的个数样例输入4样例输出2================================华丽的分割线================================ SGU里难得的水题吧,简单的分析一下就可以看得到,明显的数学规律,话不多说。#include <stdio.h> 阅读全文
posted @ 2011-06-06 21:57 zqynux 阅读(212) 评论(0) 推荐(0)
摘要:104. Little shop of flowers每个测试点的时间: 0.5s内存限制: 4096KB问题: 你想将花店的窗户装饰到最令人舒适。你又F束花,每束花都各不相同,并且个数不少于排成一排的花瓶。花瓶被粘在架子上,并且被连续地从1编号到V,那么V就是花瓶的个数。从左到右1是最左边的花瓶,V是最右边的花瓶。花朵都是可移动的,并且都被表示成1到F。这些编号是有意义的:他们决定花和被安置在一排的花瓶的出现顺序,若i<j,则i花朵必须出现在j花朵的左边。一束杜鹃花(编号是1)一束秋海棠(编号是2)和一束康乃馨(编号是3)。现在所有的花朵必须放在花瓶中并保持他们编号上的顺序,杜鹃花放在 阅读全文
posted @ 2011-06-06 20:39 zqynux 阅读(301) 评论(0) 推荐(0)
摘要:103. 交通灯每个测试点:0.5s内存限制:4096KB 在Dingilville市城市交通的安排很不寻常,公路连接着路口,在两个不同的路口之间最多有一条公路连接,没有公路会连接一个路口自身。正反向通过一条道路的时间是相同的,在每一个路口都有一个交通灯,在任意时刻它要么是蓝色的要么是紫色的,这些灯的颜色是定期交换的:蓝色持续一段时间,紫色持续一段时间。当一条公路两边的交通灯颜色相同时才允许汽车离开一个路口去另一个路口。如果一辆车到达一个路口时的瞬间交通灯的颜色改变了,那就需要重新考虑新的颜色。车辆允许在一个路口进行等待。你将得到关于城市的下列信息:每条公路通过所需要的时间(整数)每一个路口两 阅读全文
posted @ 2011-06-05 21:43 zqynux 阅读(774) 评论(0) 推荐(0)
摘要:102. 互质时间限制: 0.5s内存限制: 4096KB 给定一个整数N(1<=N<=10^4), 寻找所有小于N且于N互质的整数。================================华丽的分割线================================ 此题我有两个代码,都是自主完成的,第一个就不发了,纯粹的爆搜,从1到N-1于N的公因数为1的,因为数据太小所以AC。 第二种方法,在评测上快20,30毫秒,就是先将N的所有因子分解出来保存起来(感谢键盘农夫的提醒)先将N的所有质数因子分解并保存起来,然后再从1到N-1一个个判断,感觉会比上面一个快一点,等下把代 阅读全文
posted @ 2011-06-04 22:30 zqynux 阅读(669) 评论(11) 推荐(1)
摘要:101. 多米诺每个测试点时间限制: 0.50 sec每个测试点内存限制: 4096 KB多米诺 ——一种用木头或者其他材料做的小方块进行的游戏,其中每个小方块面上通常标记点数或分数。这些小方块被称作骨牌,多米诺。有时用骨片,用人,甚至用卡片。每个小块的表面被一条线分割成两部分,每一部分都写上了可能成对的号码。在差不多所有的现代多米诺骨牌游戏中,比赛原则是要使两个标有相同或成对的号码的小方块首尾相接应。——《大英百科全书》给你一些多米诺骨牌,每块的两部分都标记上 0 到 6 的号码,你的任务是把这些骨牌排列在一条直线上,使得相邻骨牌的相邻部分有同样的号码。骨牌可以左右翻转。输入第一行包括一个整 阅读全文
posted @ 2011-06-04 14:08 zqynux 阅读(1528) 评论(0) 推荐(1)
摘要:100. A+B每个测试点时间限制: 1 sec.每个测试点内存限制: 65536 KB读入两个整数A和B,输出它们的和。输入包含 A和B(0<A,B<10001).输出答案.样例输入5 3样例输出8================================华丽的分割线================================ 简单说明一下,原来的博客在:http://zqynux.blog.163.com/ 但是由于,网易的博客发代码的能力太差就换到这个博客这里来了,目前正在做狂刷SGU。 以前博客的文章就不移过来了,麻烦,从这里重新开始吧,Hey,Everybody 阅读全文
posted @ 2011-06-04 14:07 zqynux 阅读(161) 评论(0) 推荐(0)