| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
请高手指点,两种不同的方法,不同的结果,都是AC的代码In Reply To:我不觉得有什么不清楚的 Posted by:frkstyc at 2007-10-21 16:25:33 我们用了两种不同的理解,写了两个不同的代码,都可以过,
一:
直接求,等待年限最长的那棵树的 等待值,然后输出,(假设可以任意时间砍掉树,最后的 浪费值始终为0)
#include<iostream>
using namespace std;
int main()
{
int n,l,t,sum=0;
while(scanf("%d %d",&n,&l)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%d",&t);
t=t%l;
if(t!=0 && sum<l-t)
sum=l-t;
}
printf("%d\n",sum);
}
system("pause");
return 0;
}
二:
假设等待n年,n从1到L,计算每一个n所对应的浪费值,选取最小浪费值的n,(在等待的 过程中不能砍数,到n年结束时,将所有的树全部砍到,最后的浪费值是最小的值)
#include<iostream>
using namespace std;
int data[30000];
int main()
{
int n,l;
int k;
scanf("%d%d",&n,&l);
int i,j;
for(i = 0;i<l;i++)
data[i] = 0;
for(i = 0;i< n;i++)
{
scanf("%d",&j);
j %= l;
data[j]++;
}
int t = l;
int out,sum,min=2147483641;
while(t>0)
{
sum = 0;
for(i = 0;i<l;i++)
{
sum += data[i]*i;
}
int d = data[l-1];
for(i = l-1;i>0;i--)
{
data[i] = data[i-1];
}
data[0] = d;
if(sum < min)
{
min = sum;
out = l-t;
}
t--;
}
printf("%d\n",out);
system("pause");
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator