JZOJ 4235. 序列
题目
分析
-
首先,我们肯定知道如何用暴力的方法做
-
O(n^3) 但是数据太水。。。能过
- 正解:其实不能组成三角形的情况也就是一个feb数列
- 我们可以得知feb 到了第五十位是很大的
- 也就是说在这个数列中,如果一旦超过五十个后面将视为无效
- 因为如果在前50个数中每个数都不一样 那么一定能组成一个最小的
- 这道题主要是想卡-1-1-1的情况,所以如果我们超出50个数之后还有的话那么已经超出数据规模了
代码
1 #include<iostream> 2 using namespace std; 3 int a[100001]; 4 int main () 5 { 6 ios::sync_with_stdio(false); 7 int n,m; 8 cin>>n; 9 for (int i=1;i<=n;i++) 10 cin>>a[i]; 11 cin>>m; 12 bool flag=0; 13 for (int i=1,x,y,z,b=-1,c=-1,d=-1;i<=m;i++) 14 { 15 cin>>x; 16 if (x==2) 17 { 18 flag=1; 19 int bk=0; 20 for (int ii=3;ii<=min(n,50);ii++) 21 { 22 if (bk==1) 23 break; 24 for (int j=1;j<=ii-1;j++) 25 { 26 if (bk==1) 27 break; 28 for (int k=1;k<=j-1;k++) 29 if (a[ii]+a[j]>a[k]&&a[ii]+a[k]>a[j]&&a[j]+a[k]>a[ii]) 30 { 31 b=min(a[ii],min(a[j],a[k])); 32 if (b==a[ii]) 33 { 34 c=min(a[j],a[k]); 35 if (c==a[j]) 36 d=a[k]; 37 else 38 d=a[j]; 39 } 40 if (b==a[j]) 41 { 42 c=min(a[ii],a[k]); 43 if (c==a[ii]) 44 d=a[k]; 45 else 46 d=a[ii]; 47 } 48 if (b==a[k]) 49 { 50 c=min(a[ii],a[j]); 51 if (c==a[ii]) 52 d=a[j]; 53 else 54 d=a[ii]; 55 } 56 bk=1; 57 break; 58 } 59 } 60 } 61 cout<<b<<" "<<c<<" "<<d<<endl; 62 } 63 else 64 { 65 flag=0; 66 cin>>y>>z; 67 a[y]=z; 68 } 69 } 70 }
为何要逼自己长大,去闯不该闯的荒唐