| 记录编号 |
611361 |
评测结果 |
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
| 题目名称 |
[THUPC 2025 Final] 石墨烯 |
最终得分 |
100 |
| 用户昵称 |
LikableP |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
6.325 s |
| 提交时间 |
2026-01-28 22:44:27 |
内存使用 |
5.75 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll t,n,k,pos,a[1000009],stk[1000009];
inline ll read(){
ll s = 0,w = 1;
char ch = getchar();
while (ch > '9' || ch < '0'){ if (ch == '-') w = -1; ch = getchar();}
while (ch <= '9' && ch >= '0') s = (s << 1) + (s << 3) + (ch ^ 48),ch = getchar();
return s * w;
}
bool judge(ll x){
ll l = 1,r = 0,res = 0;
for (ll i = pos;i >= pos - n;i -= 1){
if (l <= r && stk[l] - i > x) l += 1;
if (pos - i >= x) res += max(0ll,a[stk[l]] - a[i]);
if (res > k) return 0;
while (l <= r && a[stk[r]] > a[i]) r -= 1;
stk[++ r] = i;
}
return 1;
}
int main(){
freopen("thupc_2025_canteen.in", "r", stdin);
freopen("thupc_2025_canteen.out", "w", stdout);
t = read();
while (t --){
n = read(),k = read();
ll suma = 0;
for (ll i = 1;i <= n;i += 1) a[i] = read(),suma += a[i];
for (ll i = 1;i <= n;i += 1) a[i] -= read(),a[i + n] = a[i];
if (suma == k){puts("0"); continue;}
for (ll i = 1;i <= 2 * n;i += 1) a[i] += a[i - 1];
pos = n;
for (ll i = n + 1;i <= 2 * n;i += 1) if (a[i] < a[pos]) pos = i;
ll l = 1,r = n,ans = n;
while (l <= r){
ll mid = (l + r) >> 1;
if (judge(mid)) ans = mid,r = mid - 1;
else l = mid + 1;
}
printf("%lld\n",ans);
}
return 0;
}