CF471B MUHおよび重要事項
タイトル説明
これは、キエフの動物園からサンクトペテルブルクと象ホレスの動物園からホッキョクグマMenshykovとUsladaがダウンしてビジネスになった時です。合計では、n個あるのn日と、それぞれの動物のためのタスクは、これらの各タスクを実行する必要があります。各タスクのために、彼らはその難易度を評価しました。また、動物はその難易度の順に作業を行うことを決めました。残念ながら、いくつかのタスクは同じ難易度なので、1は変更になる場合がありますタスクを実行することができます順序を持つことができます。
Menshykov、Usladaとホレスはこの迷惑に対処し、それらのそれぞれのための個別の計画を思い付くように頼みます。計画では、動物は、すべてのn個のやるべき順序記述したシーケンスであるn個のタスクを。また、それらのそれぞれが独自の計画を持って望んでいます。したがって、3つのプランは、3つの異なるシーケンスを形成しなければなりません。あなたは必要な計画を見つけることがある、またはそれ以外の場合は、与えられたタスクのための3つの異なる計画を思い付くことは不可能であることを示すことによって、それらに悲しいニュースをお届けします。
入力形式
これは、キエフの動物園からサンクトペテルブルクと象ホレスの動物園からホッキョクグマMenshykovとUsladaがダウンしてビジネスになった時です。合計では、n個あるのn日と、それぞれの動物のためのタスクは、これらの各タスクを実行する必要があります。各タスクのために、彼らはその難易度を評価しました。また、動物はその難易度の順に作業を行うことを決めました。残念ながら、いくつかのタスクは同じ難易度なので、1は変更になる場合がありますタスクを実行することができます順序を持つことができます。
Menshykov、Usladaとホレスはこの迷惑に対処し、それらのそれぞれのための個別の計画を思い付くように頼みます。計画では、動物は、すべてのn個のやるべき順序記述したシーケンスであるn個のタスクを。また、それらのそれぞれが独自の計画を持って望んでいます。したがって、3つのプランは、3つの異なるシーケンスを形成しなければなりません。あなたは必要な計画を見つけることがある、またはそれ以外の場合は、与えられたタスクのための3つの異なる計画を思い付くことは不可能であることを示すことによって、それらに悲しいニュースをお届けします。
出力フォーマット
最初の行の印刷(引用符なし)、「YES」で、仕事をしている3つの異なる計画を考え出すことが可能である場合。それ以外の場合は最初の行「NO」(引用符なし)で印刷。3つの希望のプランが存在しない場合、第二のラインNで印刷N彼らが最初に計画に従って行われるために、タスクの数を表す整数異なります。第三及び第四行目に同じ形で残りの2つの計画を印刷します。
複数の可能な答えがある場合は、それらのいずれかを印刷することができます。
サンプル入力と出力
入力#1コピー
出力#1コピー
入力#2のコピー
出力#2のコピー
説明/ヒント
これは、キエフの動物園からサンクトペテルブルクと象ホレスの動物園からホッキョクグマMenshykovとUsladaがダウンしてビジネスになった時です。合計では、n個あるのn日と、それぞれの動物のためのタスクは、これらの各タスクを実行する必要があります。各タスクのために、彼らはその難易度を評価しました。また、動物はその難易度の順に作業を行うことを決めました。残念ながら、いくつかのタスクは同じ難易度なので、1は変更になる場合がありますタスクを実行することができます順序を持つことができます。
Menshykov、Usladaとホレスはこの迷惑に対処し、それらのそれぞれのための個別の計画を思い付くように頼みます。計画では、動物は、すべてのn個のやるべき順序記述したシーケンスであるn個のタスクを。また、それらのそれぞれが独自の計画を持って望んでいます。したがって、3つのプランは、3つの異なるシーケンスを形成しなければなりません。あなたは必要な計画を見つけることがある、またはそれ以外の場合は、与えられたタスクのための3つの異なる計画を思い付くことは不可能であることを示すことによって、それらに悲しいニュースをお届けします。
ソリューション:
効果の件名:
翻訳のこの質問がハングアップしていない前に、私は、問題の解決にそれを置きます:
一部のタスクは、難易度が異なります。しかし、同じタスクの難易ある程度のかもしれません。さて、2頭のホッキョクグマと象は、あなたが増加し難易度と配列の異なる順序の3種類を与えることができることを望みます。、YESください出力3つの異なるシーケンスが存在する場合。それ以外の場合は出力NO。あなたは、このタスクを満たすことができている場合は、それらの3人は、あなたを食べに来ます!
トピック分析:
これは、実際のシミュレーションです。またはソートイェジンハオ、それを呼び出します。ちょうどあなたがそれをどのように言います。
これは次のとおりです。
それは正当3の任意のシーケンスであるため。だから我々は単に位置を交換するために、2つの等しい隣接する要素を必要としています。
二つの等しいと次の要素の二つがあるのであれば、明らかに、それは確かではありません。直接出力NO。そうでなければ出力YES、及び交換が隣接する要素のいずれかに等しいです。再びスイープされ、再びそれを掃引の反対。
コード:
#include<cstdio>
#include<algorithm>
using namespace std;
int n,cnt;
struct data
{
int v,pos;
}a[2005];
bool cmp(data a,data b)
{
return a.v<b.v;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i].v);
a[i].pos=i;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
if(a[i].v==a[i-1].v)
cnt++;
if(cnt<2)
{
puts("NO");
return 0;
}
else
{
puts("YES");
for(int i=1;i<=n;i++)
printf("%d ",a[i].pos);
puts("");
for(int i=1;i<=n;i++)
if(a[i].v==a[i-1].v)
{
swap(a[i],a[i-1]);
break;
}
for(int i=1;i<=n;i++)
printf("%d ",a[i].pos);
puts("");
for(int i=n;i;i--)
if(a[i].v==a[i-1].v)
{
swap(a[i],a[i-1]);
break;
}
for(int i=1;i<=n;i++)
printf("%d ",a[i].pos);
puts("");
}
return 0;
}