1716: 棒棒糖(暴力破解+優化)
阿新 • • 發佈:2018-12-11
zcmu:
1716: 棒棒糖
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 204 Solved: 85
[Submit][Status][Web Board]
Description
有一天,zhizhang騷年去買棒棒糖,他買了n個棒棒糖,每個棒棒糖都有ai的甜度。現在騷年開始吃每根棒棒糖,如果騷年先吃棒棒糖的甜度小於接下來吃的棒棒糖的甜度,那麼他就會汪汪叫一聲。所以,你就想調戲他,你就想找出一個順序使他叫的次數最多。
Input
多組測試資料
第一行輸入一個n(1<=n<=1000)
輸入n個數ai(1<=ai<=1000)
Output
輸出最大叫的次數。
Sample Input
5
20 30 10 50 40
4
200 100 100 200
Sample Output
4
2
HINT
Source
/*
暴力破解+優化
*/
AC_code:
#include <stdio.h> #include <string.h> #include <set> #include <algorithm> using namespace std; int a[1005]; int f[1005];//輔助陣列,標記有沒有用過(沒有用過為1) int main() { int n; while(~scanf("%d",&n)) { memset(f,1,sizeof(f)); set<int>s; int sum = 0,flag; s.clear(); for(int i = 0; i < n; i++) { scanf("%d",&a[i]); s.insert(a[i]); } if(s.size()==n)//第一步優化,如果輸入的資料都不同 sum = n - 1; else { sort(a,a+n); for(int i = 0; i < n; i++) { flag = 0; for(int j = i+1; j < n; j++) { if(a[j] > a[i] && f[j])//第二步優化,flag標記 { sum++; f[j] = 0; flag = 1; break; } } if(!flag) break; } } printf("%d\n",sum); } return 0; }