题目
思路:
如果用排序了话,O(n^4) 明显超时。
所以必须用比较的方法:找到一个范围中的 最大值 和 最小值 满足(max1-min1)==(j-i) 即成立 res++。此时的O(n^2),不超过 1 亿。
sort(a,a+n) 表示的是 n 个数据排序
超时代码
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=10010;
int n,a[N],b[N];
int pan(int i,int j)
{
sort(b+i,b+j+1);
if((b[j]-b[i])==(j-i)) return 1;
return 0;
}
int main()
{
cin>>n;
int res=0;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
memcpy(b,a,sizeof a);
if(pan(i,j)) res++;
}
cout<<res+n;
return 0;
}
代码
#include<iostream>
using namespace std;
const int N=11000;
int a[N],n,ans=0;
int max1=0,min1=11000;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
max1=0;
min1=11000;
for(int j=i;j<=n;j++)
{
max1=max(a[j],max1);
min1=min(a[j],min1);
if((max1-min1)==(j-i))
{
ans++;
}
}
}
cout<<ans<<endl;
}