hdu 1031 Design T-Shirt
2016-04-17 15:07
525 查看
Source:
http://acm.hdu.edu.cn/showproblem.php?pid=1031
题目意思是要设计T恤,先输入N,M,K。表示一共有N个人对M个元素分别打分,最后在所有元素中选出K个得分最高的。
注意点:1.数据没有给限制,用动态数组分配内存。
2.打分为double型。
3.所选编号从大到小输出,如果有得分相同,输出编号小的。
4.每种情况一行输出,每两个编号之间用空格隔开,行末没有空格。
思路:1.先把每个element的总打分写入数组score[]。
2.每次在可访问的元素中从前往后找最大值。
3.找到后把最大值写入数组answer[],并在score[]中立flag表示visited。
4.把answer数组排序。
5.按格式输出answer。
代码:
http://acm.hdu.edu.cn/showproblem.php?pid=1031
题目意思是要设计T恤,先输入N,M,K。表示一共有N个人对M个元素分别打分,最后在所有元素中选出K个得分最高的。
注意点:1.数据没有给限制,用动态数组分配内存。
2.打分为double型。
3.所选编号从大到小输出,如果有得分相同,输出编号小的。
4.每种情况一行输出,每两个编号之间用空格隔开,行末没有空格。
思路:1.先把每个element的总打分写入数组score[]。
2.每次在可访问的元素中从前往后找最大值。
3.找到后把最大值写入数组answer[],并在score[]中立flag表示visited。
4.把answer数组排序。
5.按格式输出answer。
代码:
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int main() { int n,m,k; int i,j; int pos; double cur_score,max; while(cin>>n>>m>>k) { int *flag=new int[m]; double *score=new double[m]; int *answer=new int[k]; ///初始化 memset(flag,0,sizeof(int)*m); memset(score,0.0,sizeof(double)*m); ///算分 for(i=1; i<=n; i++) for(j=0; j<m; j++) { cin >> cur_score; score[j] += cur_score; } ///计算 for(i=0; i<k; i++) { pos = -1; max = 0.0; for(j=0; j<m; j++) { if(flag[j] != 0)continue;//visited if(score[j] > max) { max = score[j]; pos = j; } } answer[i] = pos + 1;//编号=下标+1 flag[pos] = 1; } sort(answer,answer + k); ///输出 for(i=k-1; i>0; i--) cout<<answer[i]<<" "; cout<<answer[0]<<endl; ///释放 delete[] flag; delete[] score; delete[] answer; } return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性