Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35123 | liuziming | 【S】T1 | C++ | 运行出错 | 0 | 0 MS | 264 KB | 1164 | 2024-11-26 20:49:24 |
#include<bits/stdc++.h> using namespace std; mt19937 rd(time(0)); const int N=33,M=5; int n,tot,a[N],b[N],ans; bool b2; int getrand(int l,int r){return l+rd()%(r-l+1);} set<int>s; int solve(){ int wdc=0; for(int i=1;i<=n;i++){ if(b[i]==0)continue; ++wdc; if(wdc>=ans)return wdc; int x=getrand(i,n); int wb=b[i]; for(int j=i;j<=x;j++)b[j]-=wb; } return wdc; } int main(){ //freopen("cloud.in","r",stdin); //freopen("cloud.out","w",stdout); clock_t st=clock(),ed=clock(); scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); if(i>2&&a[i]<a[i-1])b2=1; s.insert(a[i]); } if(!b2){ for(int i=1;i<=n;i++){ if(a[i]){ ++ans; int wb=a[i]; for(int j=i;j<=n;j++)a[j]-=wb; } } printf("%d",ans); return 0; } ans=s.size(); if(ans==0){ printf("0"); return 0; } while((1.0*(ed-st)/CLOCKS_PER_SEC)*1000<=1800){ ed=clock(); for(int i=1;i<=n;i++)b[i]=a[i]; ans=min(ans,solve()); } printf("%d",ans); return 0; }//肇新伟