codeforce 1027C 贪心算法

答题就是贪心算法,[题目链接](http://codeforces.com/problemset/problem/1027/C)
笔者主要想借这个题谈一下如何缩短代码运行时间
1.scanf与cin,优先选择scanf
2.memset最好不要用
3.本题中,不需要开一个1e6的数组储存输入数据
4.本题中,不需要对legal[ ]每次初始化,会慢大约0.7s(总运行时间2s)
5.玄学,改成<stdio.h><stlib.h>后大约快0.05s

#include<cstdio>
#include<cstdlib>
#include<algorithm>

using namespace std;

const int N=10010;

int T;
int n;

int m;

int legal[100*N];
int bucket[N];
int index;
int x;

int main()
{
	scanf("%d",&T);
	while(T--)
	{
		index = 0;

		// memset(legal, 0 ,sizeof(legal));
		// memset(bucket, 0 ,sizeof(bucket));
		// for(int i = 0 ; i < N ; i++)	legal[i] = 0;
		for(int i = 0 ; i < N ; i++)	bucket[i] = 0;

		scanf("%d",&n);

		for(int i = 0 ; i < n ; i++)
		{
			scanf("%d",&m);

			bucket[m]++;
			if(bucket[m] == 2 || bucket[m] == 4)
			legal[++index] = m;
		}

		sort(legal+1,legal+1+index);

		double mini = N;
 		for(int i = 1 ; i < index ; i++)
 		{
 			if(legal[i] == legal[i+1])
 			{
 				x = i;
 				break;
 			}

			double k = legal[i+1]*1.0/legal[i];
			if(mini>k)
			{
				x = i;
				mini = k;
			}
		}
		printf("%d %d %d %d\n",legal[x],legal[x],legal[x+1],legal[x+1]);

	}
	return 0;
}
posted @ 2018-08-20 15:19  ronnie14165  阅读(166)  评论(0编辑  收藏  举报