ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#190627 | #3382. 切纸带 | hsfzbzjr | 100 | 134ms | 24624kb | C++11 | 1.2kb | 2023-10-06 16:23:13 | 2023-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"