2012年5月26日
摘要: 这个题用快排就超时了,由于他们的数是有范围的,所以只要将他们的数作为数组下标让他们加上一(先要将数组初始化为0),即可自动排序了,只要从下标为0开始找到n/2个数就可以了。代码:#include<iostream>using namespace std;int a,b,m,x0; int c[40001];int main(){ int x,n,s; while(scanf("%d%d%d%d%d",&n,&a,&x0,&b,&m)!=EOF) { s=0; memset(c,0,sizeof(c)); if(n==0) 阅读全文
posted @ 2012-05-26 16:08 xinmenghuairi 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 先判断起始是否为5,要是的话就将其去掉,之后再开始找下面的数转换后存入数组中,直到再次碰到5,在找不是我的数开始转换存入下一个数组中,如此循环,最后排序。#include"iostream"#include"string.h"#include"stdlib.h"using namespace std;char a[1010];int b[1000];int n,c,i;int cmp(const void*q,const void*p){ return *(int*)q-*(int*)p;}int main(){ while(cin& 阅读全文
posted @ 2012-05-26 10:12 xinmenghuairi 阅读(385) 评论(0) 推荐(0) 编辑
  2012年5月25日
摘要: 这个题是没看清楚啊,是要在需要的安排的名次的国家进行排名的,其他的不要排。代码:#include"iostream" using namespace std;typedef struct{ int jin; int pai; int renkou; double jinbi; double paibi; int zuihao;}jp;jp p[100000];int n,m;int t[10000];int ff(int s){ int s1[4]; s1[0]=s1[1]=s1[2]=s1[3]=1; int s5; for(int i=0;i<m;i++) { i 阅读全文
posted @ 2012-05-25 23:02 xinmenghuairi 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 这个题我弄了一下午,刚开始测试的结果是和例子一样,但是就是错误答案。看了下网上的答案才知道自己错在哪了:它首先是按成绩排名的当成绩一样是就要原先的先后顺序排的。刚开始我一直以为都是按名字排的。哎。。。真的要有耐心才行啊。。。代码:#include"iostream"#include"stdlib.h"#include"string"using namespace std;typedef struct{int chen;char cha1r[51];int a1;} node;node qq[310];int chen1[310];ch 阅读全文
posted @ 2012-05-25 16:20 xinmenghuairi 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 在大数组的情况下C++的输入输出尽量要改为scanf和printf,后者的时间相对小好多。要养成后者习惯啊。 阅读全文
posted @ 2012-05-25 09:57 xinmenghuairi 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 这个我原先是用C++快排的,但是没过,后来看了网上的我改了输入输出,用C的输入输出,哎。。。不同的输入输出时间尽然差了那么多啊。还有就是网上有的答案用的是数学法,很灵活啊,比快排时间短了200ms啊。其原理:由于他们是在【-500000,500000】各不同的数,即只要将他们加上500000表示数组位置(即已经按从大到小排序了)且让该数组为1表示(原数组要初始化为0)。最后只要从后面开始找m个1的位置将他们的位置减去500000即可。快排:#include"iostream"#include"stdlib.h"#include"algorith 阅读全文
posted @ 2012-05-25 09:55 xinmenghuairi 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 我用快速排序做的觉得花时间,用普通的方法做更加省时啊。虽然好用也不是每次都是最好的快排:#include"iostream"#include"stdlib.h"#include"math.h"using namespace std;int cmp(const void *a,const void *b){if((*(int *)a)<0||(*(int *)b)<0) return abs(*(int *)b)-abs(*(int *)a);return *(int *)b-*(int *)a; }int main(){i 阅读全文
posted @ 2012-05-25 00:55 xinmenghuairi 阅读(2699) 评论(0) 推荐(0) 编辑
摘要: 即条件排序问题,就要对cmp函数进行修改,我用了结构体来做的,可是运行时间比较大。本人代码:#include"iostream"#include"iomanip"#include"stdlib.h"using namespace std;typedef struct {int x;char y[10];int z;}node;node xue[100001];int c,i,n,m;int cmp(const void*a,const void*b){if(c==3&&(*(node*)a).z!=(*(node*)b 阅读全文
posted @ 2012-05-25 00:17 xinmenghuairi 阅读(191) 评论(0) 推荐(0) 编辑
  2012年5月24日
摘要: 该题只说要买最多的,即只要都买钱最少的那个即是最多的数目代码:#include<stdio.h>using namespace std;int main(){int n,m,v,i,min;while(scanf("%d%d",&n,&m)!=EOF){min=1000000000;while(n--){scanf("%d",&v);if(v<min)min=v;}printf("%d\n",m/min);}return 0;} 阅读全文
posted @ 2012-05-24 14:38 xinmenghuairi 阅读(149) 评论(0) 推荐(0) 编辑
  2012年5月23日
摘要: Problem DescriptionThere is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on red tiles, he can move only on black tiles.Write a program to count 阅读全文
posted @ 2012-05-23 22:46 xinmenghuairi 阅读(321) 评论(0) 推荐(0) 编辑