[HDOJ]1031. Design T-Shirt
算法思想谈不上,就是一个统计然后排序的过程。a数组用来存放M个Design T-Shirt的最终得分情况。b数组用来存放前K个得分最高的Design T-Shirt的序号。然后再对b数组排下序就可以了。
代码附在下面:
#include <iostream>
using namespace std;
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("in.txt","r",stdin);
#endif
int N,M,K,i,j,p;
double *a,*b,t;
while(cin>>N>>M>>K)
{
a = new double[M];
b = new double[K];
memset(a,0,M*sizeof(double));
memset(b,0,K*sizeof(double));
for(i = 0;i < N;++i)
for(j = 0;j < M;++j)
{
cin>>t;
a[j] += t;
}
//a数组用来统计M个Design T-Shirt的总得分情况
for(i = 0;i < K;++i)
{
p = 0;
for(j = 0;j < M;++j)
if(a[j] > a[p])
p = j;
b[i] = p;
a[p] = 0;
}
//对b[]数组排序
for(i = 0;i < K;++i)
{
for(p = i,j = i+1;j < K;++j)
if(b[j] > b[p])
p = j;
double temp;
temp = b[i];b[i] = b[p];b[p] = temp;
}
for(i = 0;i < K;++i)
{
if(i == 0)
cout<<b[i]+1;
else
cout<<" "<<b[i]+1;
}
cout<<endl;
}
return 0;
}
using namespace std;
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("in.txt","r",stdin);
#endif
int N,M,K,i,j,p;
double *a,*b,t;
while(cin>>N>>M>>K)
{
a = new double[M];
b = new double[K];
memset(a,0,M*sizeof(double));
memset(b,0,K*sizeof(double));
for(i = 0;i < N;++i)
for(j = 0;j < M;++j)
{
cin>>t;
a[j] += t;
}
//a数组用来统计M个Design T-Shirt的总得分情况
for(i = 0;i < K;++i)
{
p = 0;
for(j = 0;j < M;++j)
if(a[j] > a[p])
p = j;
b[i] = p;
a[p] = 0;
}
//对b[]数组排序
for(i = 0;i < K;++i)
{
for(p = i,j = i+1;j < K;++j)
if(b[j] > b[p])
p = j;
double temp;
temp = b[i];b[i] = b[p];b[p] = temp;
}
for(i = 0;i < K;++i)
{
if(i == 0)
cout<<b[i]+1;
else
cout<<" "<<b[i]+1;
}
cout<<endl;
}
return 0;
}
我没有什么雄心壮志,我只想给自己和关心自己的家人和朋友一个交代,仅此而已。