标签:node pat int na height ans return 1109
#include<bits/stdc++.h>
using namespace std;
struct node{
char na[10];
int height;
};
bool cmp(node&a,node&b){
if(a.height!=b.height) return a.height>b.height;
else return strcmp(a.na,b.na)<0;
}
int main(){
int n,k;
scanf("%d%d",&n,&k);
int _1,_2;
_1=n/k;
_2=n-(n/k)*(k-1);
vector<node> v(n+1);
for(int i=1;i<=n;i++){
scanf("%s %d",&v[i].na,&v[i].height);
}
sort(v.begin()+1,v.begin()+n+1,cmp);
map<int,string> is;
for(int i=1;i<=n;i++){
is[i]=v[i].na;
}
int p=1;
for (int i=0;i<k;i++){
vector<int> ans(_2+1);
//int ans[_2+1];
int cen=double(_2*1.0/2+1) ;
ans[cen]=p;int a=1,b=1,flag=1;
for(int i=p+1;i<=_2+p-1;i++){//一段段的判断时要同时改变起点和终点的起始值都加p
if(flag==1){
ans[cen-a]=i;
a++;
flag=0;//交替赋值不能简单奇偶
}
else{
ans[cen+b]=i;
b++;
flag=1;
}
}
/* cout<<is[p];
for(int i=2;i<=_2;i++){
// printf(" %s",is[i].c_str());
cout<<is[i];
} */
printf("%s",is[ans[1]].c_str());
for(int i=2;i<=_2;i++){
printf(" %s",is[ans[i]].c_str());
}
printf("\n");
p+=_2;
_2=_1;
}
return 0;
}
总结
1.当题干很长时,提取了信息以后一定要标个好,这样信息考虑的才全面
2.当一段段判断改变时,起点和终点起始值都要改变+同一个数
3.交替赋值,开关,不是简单奇偶,像踢球一样
4.自增自减标记 给数组赋值时
5.这里取中间位置要加1带入几个数判断即可 取中间位置要根据题意来有时候加0.5有时加1
英语
问题 无
标签:node,pat,int,na,height,ans,return,1109 来源: https://blog.csdn.net/m0_45359314/article/details/113687691
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。