沉鱼落雁
題源:https://www.cometoj.com/contest/65/problem/B?problem_id=3683
題目描述
?
胖頭魚在苦惱“沉魚落雁”是什么好吃的東西,這很顯然是因為他成語沒背夠。
于是他決定開始背成語。胖頭魚身為魚界大佬,背成語的姿勢自然也和常人不一:
他會先將所有要背的成語一字排開,比較難背的成語會重復出現(xiàn),最多重復?3?次 (也就是出現(xiàn)次數(shù)可能為?1,?2?或?3)。這樣就得到了一個可能有重復元素的成語序列,然后他會將這個序列打亂順序,并按打亂后的順序背下去。為了均勻的背所有成語,提高背成語的效率,相同成語在打亂后的序列中出現(xiàn)位置的最小間隔自然是越大越好。 (編號為?a?和?b?(a<b) 的兩個位置的間隔定義為?b-a-1)
現(xiàn)在胖頭魚把打亂前的成語序列給你,你需要幫他打亂順序,使得相同成語的最小間隔最大。
你不需要輸出確切的方案,僅求出最小間隔的最大值即可。
特別地,當每種成語都只出現(xiàn)一次時,把最小間隔的最大值視為nn。
?
輸入描述
?
第一行一個整數(shù)?n?(1<=n<=1e5),表示成語序列長度為?n。同一個成語最在序列中最多出現(xiàn)?3?次。
接下來?n?個整數(shù) a1,a2,...,an(a<=ai<=1e9) 表示一個成語序列,每個正整數(shù)都代表一個成語,兩個成語不同當且僅當值不同。
?
輸出描述
?
輸出一個整數(shù),表示最小間隔的最大值。
?
樣例輸入 1?
9 5 4 3 1 3 1 1 5 5樣例輸出 1
2樣例解釋 1
其中一組可行方案是1 3 5 1 3 5 1 4 5,容易驗證沒有比?2?更大的答案。
樣例輸入 2?
5 1 2 3 4 5樣例輸出 2
5題意:給n個數(shù),可以重新排序,不過要相同元素最小間隔最大
反正當時沒做出來,手動滑稽
題解:唉,不想了,復制官方的,看完后感覺太坑了
?
?
?
?嗯,應該是沒腦子的人、
#include <math.h> #include <iostream> #include<cstring> #include <algorithm> using namespace std; int a[100009]; int b[100009]; int main() {int n;cin>>n;for(int i=0; i<n; i++){cin>>a[i];}sort(a,a+n);int ans1=-1;int ans2=-1;int k=0;int x=0,y=0,z=0;for(int i=0; i<n;){if(a[i]==a[i+1]&&a[i+1]==a[i+2]){i+=3;x++;}if(a[i]==a[i+1]&&a[i+1]!=a[i+2]){i+=2;y++;}if(a[i]!=a[i+1]){i++;z++;}}if(x!=0)cout<<x+y+z/2-1;if(x==0&&y!=0)cout<<y-1+z; if(x==0&&y==0)cout<<n; } View Code?
完結,撒花,沒腦子的先溜了
轉載于:https://www.cnblogs.com/RE-TLE/p/11494570.html
總結
- 上一篇: 分面导航的详细操作方案
- 下一篇: 计算凸多边形的面积