codeforce 1027C 贪心算法
答题就是贪心算法,[题目链接](http://codeforces.com/problemset/problem/1027/C)
笔者主要想借这个题谈一下如何缩短代码运行时间
1.scanf与cin,优先选择scanf
2.memset最好不要用
3.本题中,不需要开一个1e6的数组储存输入数据
4.本题中,不需要对legal[ ]每次初始化,会慢大约0.7s(总运行时间2s)
5.玄学,
#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;
}
透过泪水看到希望