严重超时。只过了第1,4个点,得12分,以后再说。
后来换了思路,还是只得了16分,只有第2点错误,第4点超时,想不出不过的case。
//23:46 16分
#include<stdio.h>
const int NUM=100005;
int a[NUM];
int main()
{
int n,i,val;
int index=-1;
freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);
scanf("%d%d",&n,&val);
a[0]=0;
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
a[i]+=a[i-1];
if(index==-1&&a[i]>=val){
index=i;
}
}
int j,fg=0;
for(i=index;i<=n;i++){
for(j=0;j<i;j++){
if(a[i]-a[j]==val){
fg=1;
printf("%d-%d\n",j+1,i);
}
}
}
if(fg==0){
for(i=index;i<=n;i++){
for(j=i-1;j>=0;j--){
if(a[i]-a[j]>val){
printf("%d-%d\n",j+1,i);
break;
}
}
}
}
return 0;
}
//1044 0:40
#include<stdio.h>
const int MAXN=100005;
int dp[MAXN];
int a[MAXN];
int main()
{
int n,i,j,val;
//freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);
scanf("%d%d",&n,&val);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
dp[i]=a[i];
}
int fg=0;
int index;
for(i=0;i<n;i++){
if(dp[i]==val){
fg=1;
printf("%d-%d\n",i+1,i+1);
continue;
}
for(j=i+1;j<n;j++){
if(dp[i]+a[j]==val){
fg=1;
printf("%d-%d\n",i+1,j+1);
break;
} else if(dp[i]+a[j]<val)
dp[i]+=a[j];
}
}
if(fg!=1){
for(i=0;i<n;){
dp[i]=a[i];
if(dp[i]>val){
printf("%d-%d\n",i+1,i+1);
i++;
continue;
}
for(j=i+1;j<n;j++){
if(dp[i]+a[j]>val){
index=i;
while(dp[i]+a[j]-a[index]>val){
dp[i]-=a[index];
index++;
}
printf("%d-%d\n",index+1,j+1);
i=index;
break;
} else
dp[i]+=a[j];
}
i++;
}
}
return 0;
}