标签:++ href input output vector blank lin main lan
第1行:一个数N,表示数组的长度(1 <= N <= 50000)。 第2 - N + 1行:每行1个数Ai(1 <= Ai <= 10^9)。
输出最多可以将山分为多少段。
12 1 5 3 4 3 4 1 2 3 4 6 2
3
先求n的因子,由于不是很多,可以全算下,看哪个大就输出哪个。
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 5e4+10; 4 int a[N], n, b[N]; 5 vector<int> vs; 6 bool ok(int x) { 7 if(b[n] < x) return false; 8 int len = n/x; 9 for(int i = 0; i < x; i ++) { 10 if(b[(i+1)*len]-b[i*len+1] == 0) return false; 11 } 12 return true; 13 } 14 int main() { 15 cin >> n; 16 for(int i = 1; i <= n; i ++) cin >> a[i]; 17 for(int i = 2; i < n; i ++) { 18 b[i+1] = (a[i]>a[i-1]&&a[i]>a[i+1]) + b[i]; 19 } 20 if(!b[n])return 0*printf("0\n"); 21 // for(int i = 1; i<= n; i ++) printf("%d ",b[i] );printf("\n" ); 22 for(int i = 2; i <= sqrt(n); i ++) { 23 if(n%i==0) { 24 vs.push_back(i); 25 vs.push_back(n/i); 26 } 27 } 28 sort(vs.begin(),vs.end()); 29 for(int i = vs.size()-1; i >= 0; i --) { 30 if(ok(vs[i])) return 0*printf("%d\n",vs[i]); 31 } 32 printf("1\n"); 33 return 0; 34 }
标签:++ href input output vector blank lin main lan
原文地址:https://www.cnblogs.com/xingkongyihao/p/8976881.html