A1109Group Photo (25分)(逻辑题)
一、技术总结
- 首先题目的意思是,要给一群人拍照,然后要选取好位置,给n个人,排成k行,然后每行人数为n/k,最后一排人数为n-n/k*(k-1)。然后人是身高从高到低排,如果身高一样就按字母顺序从后往前排,在同一行中,最高的在中间位置,然后再左边一个次高的再右边一个第三高的,这样排好这一排,具体理解看题中例子。
- 我们首先使用一个结构体将数据存储起来,string类型存储名字,int存储身高。用vector存储,使用cmp函数排序。
- 最后使用一个ans存储每一行的需要输出的结果,在放入的时候需要注意。左右两边分别放,跳两个数存一次,具体参考代码。
二、参考代码
#include<bits/stdc++.h>
using namespace std;
struct node{
int height;
string name;
};
int cmp(struct node a, struct node b){
return a.height != b.height ? a.height > b.height : a.name < b.name;
}
int main(){
int n, k, m;
cin >> n >> k;
vector<node> stu(n);
for(int i = 0; i < n; i++){
cin >> stu[i].name;
cin >> stu[i].height;
}
sort(stu.begin(), stu.end(), cmp);
int t = 0, row = k;
while(row){
if(row == k){
m = n - n/k*(k-1);
}else{
m = n / k;
}
vector<string> ans(m);
ans[m / 2] = stu[t].name;
//左边一列
int j = m / 2 - 1;
for(int i = t + 1; i < t + m; i = i + 2){
ans[j--] = stu[i].name;
}
//右边一列
j = m / 2 + 1;
for(int i = t + 2; i < m + t; i = i + 2){
ans[j++] = stu[i].name;
}
//输出当前排
cout << ans[0];
for(int i = 1; i < m; i++){
cout << " " << ans[i];
}
cout << endl;
t = t + m;
row--;
}
return 0;
}
作者:睿晞
身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
曾有一个业界大牛说过这样一段话,送给大家:
“华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.