UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#190627#3382. 切纸带hsfzbzjr100134ms24624kbC++111.2kb2023-10-06 16:23:132023-10-06 18:35:59

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
int n;ll m;
ll l[N];

namespace subtask1{
	void solve(){
		int ans=0;
		ll sum=0;int cnt=0;
		for(int i=1;i<=n;i++){
			sum=cnt=0;
			for(int j=i;j<=n;j++){
				sum+=l[j];
				if(sum==m)sum=0,cnt++;
				else if(sum>m)break;
			}
			ans=max(ans,cnt);
		}
		printf("%d\n",ans);
	}
}

namespace subtask2{
	int f[N],pre[N];
	ll sum[N];
	void solve(){
		for(int i=1;i<=n;i++)sum[i]=sum[i-1]+l[i];
		
//		for(int i=1;i<=n;i++)cout<<sum[i]<<" ";cout<<endl;
		
		for(int i=1;i<=n;i++){
			int j=lower_bound(sum,sum+1+i,sum[i]-m)-sum;
//			cout<<"i: "<<i<<" j: "<<j<<endl;
//			cout<<"sum[i]: "<<sum[i]<<endl;
			if(sum[j]+m!=sum[i])pre[i]=-1;
			else pre[i]=j;
		}
		
		for(int i=1;i<=n;i++){
			if(pre[i]>0)f[i]=f[pre[i]]+1;
			else if(pre[i]==0)f[i]=1;
		}
		printf("%d\n",*max_element(f+1,f+1+n));
		
//		for(int i=1;i<=n;i++)cout<<pre[i]<<" ";cout<<endl;
	}
}

int main(){
	
//	freopen("tape.in","r",stdin);
//	freopen("tape.out","w",stdout);
	
	scanf("%d %lld",&n,&m);
	
	for(int i=1;i<=n;i++)scanf("%lld",&l[i]);
	
	if(n<=5000)
		subtask1::solve();
	else 
		subtask2::solve();
			
	return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 3ms
memory: 1196kb

input:

10 8
7 6 1 1 1 2 2 1 1 1

output:

2

result:

ok 1 number(s): "2"

Test #2:

score: 10
Accepted
time: 0ms
memory: 1196kb

input:

20 15
15 15 15 6 5 4 3 1 2 1 4 3 1 2 1 1 3 2 5 1

output:

6

result:

ok 1 number(s): "6"

Test #3:

score: 10
Accepted
time: 0ms
memory: 1192kb

input:

50 150
30 83 136 11 2 94 137 127 111 27 150 150 150 150 150 47 150 145 67 150 150 59 143 142 150 18 ...

output:

5

result:

ok 1 number(s): "5"

Test #4:

score: 10
Accepted
time: 0ms
memory: 1192kb

input:

100 10000
2397 9666 164 4643 8586 5876 4272 2648 1874 1206 6920 1732 107 35 778 428 6920 262 888 582...

output:

8

result:

ok 1 number(s): "8"

Test #5:

score: 10
Accepted
time: 0ms
memory: 1196kb

input:

500 278529
33329 243449 856 45 557 153 52 68 9 11 15965 25498 110413 69087 26846 16166 3236 4561 127...

output:

12

result:

ok 1 number(s): "12"

Test #6:

score: 10
Accepted
time: 0ms
memory: 1232kb

input:

5000 1024
369 299 338 137 12 186 10 180 97 117 148 16 8 169 31 44 17 111 24 7 42 12 45 276 67 6 1 2 ...

output:

26

result:

ok 1 number(s): "26"

Test #7:

score: 10
Accepted
time: 0ms
memory: 2368kb

input:

50000 2
1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 ...

output:

1435

result:

ok 1 number(s): "1435"

Test #8:

score: 10
Accepted
time: 11ms
memory: 3540kb

input:

100000 2
2 2 1 1 2 2 1 1 1 2 1 1 2 1 1 2 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 2 1 2 2 2 2 1 1 2 1 1 2 2 2...

output:

1065

result:

ok 1 number(s): "1065"

Test #9:

score: 10
Accepted
time: 15ms
memory: 3540kb

input:

100000 594914243
32593384 70791539 466102281 5146792 10441404 6860910 391592 109128 1123315 1345154 ...

output:

121

result:

ok 1 number(s): "121"

Test #10:

score: 10
Accepted
time: 105ms
memory: 24624kb

input:

1000000 1000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...

output:

850

result:

ok 1 number(s): "850"