
Other algorithm
X-Wyatt
For free 邮箱whitezhangv5@gmail.com
展开
-
HDU 1033
模拟水题,题意就是起始点为(300,420),然后每次根据现有的方向移动10个unit,依次输出PS:最近在刷第一页#include #include #include using namespace std;#define LEN 300int main() { char cmd[LEN]; while(scanf("%s", cmd) != EOF) { int原创 2012-12-05 17:14:44 · 1250 阅读 · 0 评论 -
词法分析器(C语言版)
词法分析器:有限状态机的理论并不难,但是如果把状态机理论转换成代码,这个就需要思考了数据结构设计:char charList[_CHARLIST_SIZE][15] = {0};char charList_nu[_CHARLIST_SIZE] = {0};char charList_index = 0;char numList[_NUMLIST_SIZE][15] =原创 2013-03-25 14:13:54 · 2445 阅读 · 0 评论 -
HDU 1161
本来想做Kruskal的,结果做了个这个。#include #include #include using namespace std;int main() { char str[1005]; while(gets(str)) { for(int i = 0; str[i] != '\0'; i++) { if(str[i] = 'A') { str[i] =原创 2013-08-02 07:54:17 · 1132 阅读 · 0 评论 -
HDU 1196
位运算的题#include #include #include using namespace std;int main() { int n; while(scanf("%d", &n), n != 0) { int i = 1; while(!(n&i)) { i <<= 1; } printf("%d\n", i); } return 0;原创 2013-08-02 16:44:18 · 658 阅读 · 0 评论 -
HDU 1062
水了一道题,看到网上一些人的解题报告并不完美。这里用栈去模拟这个过程应该是比较好的解法,如果用判断空格,然后用 i-1的话,遇到以空格开头的数据就不对了。#include #include #include #include using namespace std;int main() { int t; scanf("%d", &t); getchar(); for(in原创 2013-08-02 16:24:30 · 956 阅读 · 0 评论 -
2013渣打GitHub测试代码
Length题目介绍您要做的是一个长度单位转化和计算工具,能够把不同的长度单位转换为标准长度(米),并且可以在不同单位之间进行加减运算。输入文件输入文件input.txt的内容可分为两部分:不同单位和标准长度米的转换规则, 比如1 mile = 1609.344 meters, 代表1英里等于1609.344米;转换前或者计算前的单位,比如 1.2 miles原创 2013-08-03 16:11:33 · 2241 阅读 · 7 评论 -
HDU 1391
分类讨论推倒公式而已#include #include #include using namespace std;int main() { int n; scanf("%d", &n); while(n--) { int a, b; int k; scanf("%d%d", &a, &b); if(0 == a && 0 == b) { printf("原创 2013-08-19 10:56:04 · 772 阅读 · 0 评论 -
乘法散列表的分析
构造乘法散列表的乘法方法包含了两个步骤:1. 用关键字 K 乘上常数 A (02. 然后再用 m 乘以这个值,再向下去整总之散列函数为:h(k) = |_ (m*(k*Amod1)) _| 这里对m没有太大的要求,一般选择他为2的某个幂次方( m 的取值规定了hash的长度)Knuth提出 A 的最佳选择为 A ≈ (√5-1)/2 = 0.618 033 988 7.原创 2013-08-22 23:35:45 · 1671 阅读 · 0 评论 -
BBC 生命大设计
BBC霍金的生命的意义一视频中,有一段图案特别漂亮,于是我就写了一下,具体的繁殖规则是这样的:有存活体和死方格两个部分构成,我分别用 ' * ' 和 ‘ ’ 表示。当一个存活体周围有超过三个存活体时,这个存活体就会因为过度拥挤而死亡,当一个死方格周围有三个存活体时,这个死方格就会产生新的生命。这里我使用了滚动数组,从而优化了代码。不过在运行的时候发现,死亡率依旧很高,并没有达到视频中那么原创 2013-08-11 20:12:43 · 1454 阅读 · 0 评论 -
HDU 4006
先上一个AC代码,用的是优先队列#include#include#include#include#includeusing namespace std;int main(){ int n,k,i,num,j; char str[1000]; while(cin>>n>>k){ priority_queue,greater >q; getchar()原创 2013-01-25 18:31:46 · 850 阅读 · 0 评论 -
HDU 3293
字符串的排序模拟:以后最好都用 qsort。这里用sort排序出来的结果不对。sort 是用大于小于号来返回bool值进行排序。qsort 则返回int类型,从而进行排序PS:升序用后一个减去前一个#include #include #include #include using namespace std;struct Weapon { char name[21]原创 2012-10-31 15:25:58 · 467 阅读 · 0 评论 -
HDU 1210
一个似曾相识的题。以前的是找规律然后找所有周期的最小公倍数#include #include int main() { int n,t,k,s; while(scanf("%d",&n)!=EOF) { t=1,s=0; while(1) { if(t<=n)原创 2012-11-27 01:58:18 · 796 阅读 · 0 评论 -
HDU 4268
一开始写的代码一直TLE,我的方法是n^2的二重循环。看完别人的解体报告后才发现了另一种更好的办法把两个数组放在一块,然后排序,从而保证了后面的必能覆盖了前面的,把时间复杂度降到了2n #include #include #include #include #include #define LEN 100001#define MMAX 999999using nam原创 2012-12-01 00:12:59 · 565 阅读 · 0 评论 -
HDU 4296
看了别人的报告才写出来的证明:对于相邻放置的两块板,设两块板为i,j他们上面的重量为sum 1) a=sum-si;b=sum+wi-sj; 交换两个板的位置 2)a'=sum+wj-si;b'=sum-sj; 如果1优于2,求解得有效的条件为wj-si>wi-sj。原创 2012-09-18 22:21:05 · 432 阅读 · 0 评论 -
HDU 1012
上完课A个题去吃饭,结果发现编译器坏了,没编译我就提交了,发现AC了#include #include #include int main() { double e; int i, tmp; e = 1; tmp = 1; printf("n e\n"); printf("- -----------\n"); printf("0 1\n"); for(i = 1; i原创 2012-11-29 18:44:36 · 2244 阅读 · 0 评论 -
HDU 1789
主要是一个思路:按照 reduced socres 从大到小排序, deadline 从大到小或者从小到大都可以。假设这里的deadline是从小到大的例如有这样一组数据1 2 2 4 4 45 2 4 5 5 5排序完之后:首先安排 reduced为5的,第一天就有事情做了,然后查找到第四天的,随后第四天也有事情做了,再次查找,发现第四天有事情做了,所以推到第三天,同理下一个推原创 2012-11-09 22:19:04 · 615 阅读 · 0 评论 -
HDU 1051
1A, Greedy algorithm:#include #include #include #include using namespace std;#define LEN 5010typedef struct Node{ int l, w;}Node;Node node[LEN];Node ans[LEN];int cmp(Node a, Node b) {原创 2012-10-08 17:38:16 · 545 阅读 · 0 评论 -
Codeforces143Div.2-B
Simulated problem:#include #include #include #include using namespace std;#define LEN 100001int a[LEN], su[LEN];int main() { int n, k; while(scanf("%d%d", &n, &k) != EOF) { int i, j原创 2012-10-10 01:13:37 · 1001 阅读 · 0 评论 -
HDU 1085
分类就可以了#include #include #include using namespace std;int main() { int a, b, c; while(scanf("%d%d%d", &a, &b, &c), !(0 == a && 0 == b && 0 == c)) { int i, j, sum; sum = 0; if(a >= 2 &&原创 2012-11-01 20:52:49 · 370 阅读 · 0 评论 -
POJ 3122 二分查找
分派,每个人只能从其中一个派中取一部分,并且保证等分。就用二分了。做的时候用C++提交没有问题,用G++提交,输出的时候必须是 %f(居然double 类型的也用%f)无解了。#include #include #include using namespace std;#define LLEN 10005#define PI 3.1415926535897932do原创 2013-08-11 16:20:51 · 1581 阅读 · 0 评论