Uva 10057 A mid-summer night's dream
阿新 • • 發佈:2019-01-30
題目連結:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=998
題意:與10041Uva 10041 Vito's Family類似,只不過求得滿足最小條件的數,給出的n個數中滿足條件的數個數,和所有滿足條件的數個數。
題解:
中位數最小值為排序後n/2位置上的數。
對於奇數個數,滿足條件的數只有一個,最中間的數,求出在給出的數中的個數即可。
對於偶數個數,滿足條件的數是最中間兩個數之間的任何數,求出給出的數中等於最中間兩個數的個數。
程式碼:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAX=1000000+10; int a[MAX]; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) { scanf("%d",&a[i]); } sort(a,a+n); int ans1=0,ans2=0,ans3=0; if(n%2) { ans1=a[n/2]; for(int i=0;i<n;i++) { if(a[i]==ans1) ans2++; } ans3=1; } else { ans1=a[n/2-1]; for(int i=0;i<n;i++) if(a[i]==a[n/2-1]||a[i]==a[n/2]) ans2++; ans3=a[n/2]-a[n/2-1]+1; } printf("%d %d %d\n",ans1,ans2,ans3); } return 0; }