PAT(初級)1055集合写真(アナログ、良いタイトル)

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq_45458915/article/details/102728239

トピックリンク:こちらをクリックしてください

効果の件名:N最後のキューの分布を求めて、立って個人の名前と高さを与え、その後、K行を立って、合計の必要性を与え、そして今のルールに従ってくださいする必要があります。

  1. (切り捨て)N / Kの各列の数、最後の行に立ってすべての余分な人。
  2. 戻るすべての子前列の誰よりも短くありません。
  3. 各中間ステーション最高行(行数のmは、分割が切り捨て中間位置m / 2 + 1)。
  4. 各行他の中間軸に、高さの非昇順、最初の左右交互にエンキュー起立仲介5の(例えば190,188,186,175,170高さ、形成175によれば、 。188190186170)これは、あなたがカメラマンに直面していると仮定し、その左手には、仲介の権利です。
  5. 同じ高さ以上の場合は、辞書の名前が降順に配置されている押してください。ここには名前が重複することを確実にするために。

トピック分析:多くのことを達成するために必要な、間接的、要求の主要被写体が直接達成するのは良いアイデアではない、部分的シミュレーションのタイトルバーの下の媒質困難と考え、まだ明確な書き込みを確認する必要があり、の元のタイトルがあります説明と答えはそれが昇順でオリジナルタイトルシーケンスが辞書の名前に応じてと言って、第五ルールの上に、と私はそれを書いた後、それはそうではありません見つけ、部分的に正しいですが、間違っている直接に下降した後A

私は問題の非常に良いシミュレーションを感じ、あなたは純粋にあなたが何をしたいの規則に従って、あまりにも多くの不要なピット、​​運動のコードを実装する能力がない行使することができ、かつ達成することが、まだそれほど簡単ではない、私は非常に良い質問を感じる、書き込みブログはレコードに関する幸せにシミュレートし、マークが良いタイトルを見て

コード:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream> 
#include<deque>
#include<unordered_map>
#define Pi acos(-1.0)
using namespace std;

typedef long long LL;

const int inf=0x3f3f3f3f;

const int N=1e4+100;

struct Node
{
	string name;
	int h;
	bool operator<(const Node& a)const
	{
		if(h!=a.h)
			return h<a.h;
		return name>a.name;
	}
}a[N];

string ans[15][N];

int main()
{
//  freopen("input.txt","r",stdin);
	int n,k;
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++)
		cin>>a[i].name>>a[i].h;
	sort(a,a+n);
	int N=n/k;
	int m;
	for(int i=0;i<k;i++)
	{
		if(i!=k-1)
		{
			int st=i*N;
			int ed=i*N+N;
			int pos=N/2+1;
			ans[i][pos]=a[ed-1].name;
			for(int j=ed-2;j>=st;j-=2)
			{
				pos--;
				ans[i][pos]=a[j].name;
			}
			pos=N/2+1;
			for(int j=ed-3;j>=st;j-=2)
			{
				pos++;
				ans[i][pos]=a[j].name;
			}
		}
		else
		{
			int st=i*N;
			int ed=n;
			m=ed-st;
			int pos=(ed-st)/2+1;
			ans[i][pos]=a[ed-1].name;
			for(int j=ed-2;j>=st;j-=2)
			{
				pos--;
				ans[i][pos]=a[j].name;
			}
			pos=(ed-st)/2+1;
			for(int j=ed-3;j>=st;j-=2)
			{
				pos++;
				ans[i][pos]=a[j].name;
			}
		}
	}
	for(int i=k-1;i>=0;i--)
	{
		if(i==k-1)
			for(int j=1;j<=m;j++)
				cout<<ans[i][j]<<(j==m?'\n':' ');
		else
			for(int j=1;j<=N;j++)
				cout<<ans[i][j]<<(j==N?'\n':' ');
	}	
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    return 0;
}

 

おすすめ

転載: blog.csdn.net/qq_45458915/article/details/102728239