随笔分类 -  ACM-数学题

摘要:这题就是求中位数,直接用qsort排序取中,算法复杂度为O(NlogN)当然求中位数的最优算法是O(N)的Select算法Source CodeProblem: 2388User: yangliuACMerMemory: 284KTime: 63MSLanguage: C++Result: Accepted#include <iostream> #include <stdlib.h> using namespace std; int comp(const void * a, const void * b){ return (*(int*)a - *(int*)b); } 阅读全文
posted @ 2012-02-11 13:23 yangleo 阅读(198) 评论(0) 推荐(0)
摘要:这个题目直接用的暴力枚举,但是还是WA了几次原因是这句话You should process all pairs of integers and for each pair determine the maximum cycle length over all integers between and including i and j.注意i可能大于j,此时需要交换顺序,但是输出的时候还会是原始顺序比如 输入1 10 输出 1 10 20 ;输入10 1 输出 10 1 20因此交换i和j需要用标志位记录一下Source CodeProblem: 1207User: yangliuACMer 阅读全文
posted @ 2012-02-10 21:57 yangleo 阅读(218) 评论(0) 推荐(0)
摘要:水题一道,以后还是不做水题,没什么收获Source CodeProblem: 2017User: yangliuACMerMemory: 244KTime: 0MSLanguage: C++Result: Accepted#include <iostream>using namespace std;int main(){ int n,s[11],t[11]; int i,ret; while(cin>>n, n != -1){ ret = 0; memset(s, 0, sizeof(s)); memset(t, 0, sizeof(t)); for(i = 1; i 阅读全文
posted @ 2012-02-10 16:54 yangleo 阅读(217) 评论(0) 推荐(0)
摘要:对于任意一个序列i, i + 1, ..., j其最大的inversion number是全部逆序的情况,即j, j - 1, ..., i + 1, i,值记为in(i, j) = (j - i + 1) * (j - i) / 2所以这个问题的解决的步骤如下:(1)对于输入n, seq, 从后往前考虑找到可以涵盖seq值的i, 即in(i, n) >= seq(2)由(1)可知,i -> n足够用来表示值为seq的insersion number,所以1-> i - 1只要按照升序打印即可(3)剩下的i -> n如何表示值为seq的逆序数呢?考察几个例子不难发现.剩 阅读全文
posted @ 2010-12-20 23:37 yangleo 阅读(290) 评论(0) 推荐(0)
摘要:开始用了暴力枚举,后来一看数据这么大,估计肯定超时,无奈上网搜索了一下,考察的是扩展欧几里德算法,还有比较大的整数_int64的处理。转自http://apps.hi.baidu.com/share/detail/16229280 设过s步后两青蛙相遇,则必满足以下等式: (x+m*s)-(y+n*s)=k*l(k=0,1,2....) 稍微变一下形得: (n-m)*s+k*l=x-y 令n-m=a,k=b,x-y=c,即 a*s+b*l=c 只要上式存在整数解,则两青蛙能相遇,否则不能。 首先想到的一个方法是用两次for循环来枚举s,l的值,看是否存在s,l的整数解... 阅读全文
posted @ 2010-12-17 23:08 yangleo 阅读(196) 评论(0) 推荐(0)
摘要:今天主要是学习了一下DP,三个使用前提:最优子结构、子问题重叠性、无后效性,今后重点练dp题,至少做30题加深理解 这题纯粹为了练习编码速度。#include <iostream>#include <string>using namespace std;int main(){ int c,miles = 0; string a; char b; while(cin>>a && a[0] != '#'){ if (a[0] != '0') { cin>>a>>c>>b; swi 阅读全文
posted @ 2010-11-28 21:33 yangleo 阅读(260) 评论(0) 推荐(0)
摘要:这题很简单,可以设置结构体保存三维及姓名,求出体积最大的人和最小的人输出即可。 由于没有注意输出"."而贡献了一次WA,囧#include <iostream>#include <algorithm>#include <string>using namespace std;struct stu{ stu(){} string name; int d;}s[1000];int comp(const void * a,const void * b){ return ((stu*)a)->d - ((stu*)b)->d;}int 阅读全文
posted @ 2010-11-27 20:47 yangleo 阅读(240) 评论(0) 推荐(0)
摘要:这题很简单,直接贴AC代码了#include <iostream>#include <string.h>#define MAXN 10000using namespace std;int num[MAXN];int dnum(int i){ int sum = i; int temp; while (i > 0) { temp = i%10; sum += temp; i = (i-temp)/10; } return sum;}int main(){ int i,j; for (i = 0;i<MAXN;i++) { num[i] = 1; } for ( 阅读全文
posted @ 2010-11-27 16:24 yangleo 阅读(180) 评论(0) 推荐(0)