ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#335 | #7. 「WyOJ Round 1」归 · 星穗垂野 | Pigsyy | 100 | 9307ms | 136908kb | C++23 | 4.6kb | 2025-04-18 20:57:04 | 2025-04-18 20:57:04 |
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define re register
#define il inline
#define pii pair<int,int>
#define x first
#define y second
#define gc getchar()
#define rd read()
#define debug() puts("------------")
namespace yzqwq{
il int read(){
int x=0,f=1;char ch=gc;
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=gc;}
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=gc;
return x*f;
}
il int qmi(int a,int b,int p){
int ans=1;
while(b){
if(b&1) ans=ans*a%p;
a=a*a%p,b>>=1;
}
return ans;
}
il int gcd(int a,int b){
if(!b) return a;
return gcd(b,a%b);
}
il int lcm(int a,int b){
return a/gcd(a,b)*b;
}
il void exgcd(int a,int b,int &x,int &y){
if(!b) return x=1,y=0,void(0);
exgcd(b,a%b,x,y);
int t=x;
x=y,y=t-a/b*x;
return ;
}
il int F(int n,int a,int b,int c){
//sum{|_ (ai+b)/c _| i:0~n}
if(!n) return b/c;
if(!a) return (n+1)*(b/c);
if(a>=c||b>=c){
int x=a/b,y=b/c;
return n*(n+1)/2*x+(n+1)*y+F(n,a%c,b%c,c);
}
int m=(a*n+b)/c;
return n*m+F(m-1,c,c-b+1,a);
}
struct lb{
int d[64];
il void print(){
for(re int i=0;i<63;++i)
if(d[i]) printf("%lld:%lld\n",i,d[i]);
return ;
}
lb(){memset(d,0,sizeof(d));}
il void operator +=(int x){
for(re int i=62;i>=0;--i){
if(!(x&(1ll<<i))) continue;
if(d[i]) x^=d[i];
else return d[i]=x,void(0);
}
return ;
}
int& operator [](int x){
return d[x];
}
il void operator +=(lb &x){
for(re int i=62;i>=0;--i)
if(x[i]) *this+=x[i];
return ;
}
il friend lb operator +(lb &x,lb &y){
lb z=x;
for(re int i=62;i>=0;--i)
if(y[i]) z+=y[i];
return z;
}
il int Max_calc(){
int ans=0;
for(re int i=62;i>=0;--i)
if((ans^d[i])>ans) ans^=d[i];
return ans;
}
};
mt19937 rnd(time(0));
}
using namespace yzqwq;
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
const int N=1e5+10,inf=1e18;
int n,C;
int a[N],b[N],s[N];
int __[N],Gcd[N][20];
struct Tree{
int l,r,mi;
}tr[N<<2];
struct node{
int i,j,delta,k;
};
struct node_{
int j,k;
};
vector<node_> vec_[N];
vector<node> vec[N];
il void up(int u){
tr[u].mi=min(tr[ls(u)].mi,tr[rs(u)].mi);
return ;
}
il void build(int u,int l,int r){
tr[u].l=l,tr[u].r=r,tr[u].mi=inf;
if(l==r) return ;
int mid=l+r>>1;
build(ls(u),l,mid),build(rs(u),mid+1,r);
return ;
}
il void modify(int u,int x,int y){
if(tr[u].l==tr[u].r) return tr[u].mi=min(tr[u].mi,y),void(0);
int mid=tr[u].l+tr[u].r>>1;
if(x<=mid) modify(ls(u),x,y);
else modify(rs(u),x,y);
return up(u),void(0);
}
il int query(int u,int l,int r){
if(tr[u].l>=l&&tr[u].r<=r) return tr[u].mi;
int mid=tr[u].l+tr[u].r>>1;
if(l<=mid&&mid< r) return min(query(ls(u),l,r),query(rs(u),l,r));
if(l<=mid) return query(ls(u),l,r);
return query(rs(u),l,r);
}
il int get_gcd(int l,int r){
int k=__[r-l+1];
return gcd(Gcd[l][k],Gcd[r-(1ll<<k)+1][k]);
}
il void solve(){
n=rd,C=rd;
for(re int i=0;i<=n;++i) __[i]=log2(i),vec[i].clear(),vec_[i].clear();
for(re int i=1;i<=n;++i) a[i]=rd,Gcd[i][0]=a[i];
for(re int i=1;i<=n;++i) b[i]=rd,s[i]=s[i-1]+b[i];
for(re int j=1;j<20;++j)
for(re int i=1;i+(1ll<<j)-1<=n;++i) Gcd[i][j]=gcd(Gcd[i][j-1],Gcd[i+(1ll<<(j-1))][j-1]);
for(re int r=1;r<=n;++r){
int u=r;
while(u>=1){
int gcdd=get_gcd(u,r);
int le=1,ri=u,w=-1;
while(le<=ri){
int mid=le+ri>>1;
if(get_gcd(mid,r)>=gcdd) w=mid,ri=mid-1;
else le=mid+1;
}
int x=w,y=u;
//r+1-gcdd>=l
int l=r+1-gcdd;
l=min(l,y);
if(l<x){
u=x-1;
continue;
}
vec[l-1].push_back({r,r-l+1,gcdd*s[r]-gcdd*s[l-1]+C,gcdd});
u=x-1;
}
}
build(1,0,N-1);
vec_[0].push_back({0,0});
for(re int r=0;r<=n;++r){
for(auto x:vec_[r]){
int j=x.j,k=x.k;
modify(1,x.j,x.k);
}
for(auto x:vec[r]){
int i=x.i,j=x.j,delta=x.delta,k=x.k;
int Min=query(1,0,k);
vec_[i].push_back({j,delta+Min});
}
}
// if(tr[1].mi==0) assert(0);
printf("%lld\n",query(1,1,N-1));
return ;
}
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
int t=rd;while(t--)
solve();
return 0;
}
这程序好像有点Bug,我给组数据试试?
Details
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 1419ms
memory: 18128kb
input:
1000 10 -759451753 8 10 5 7 5 10 6 10 2 1 5 6 5 4 9 8 5 4 1 3 10 -953033990 4 10 10 8 8 2 1 7 4 1 0 ...
output:
-2278355214 -2859101918 -21349075 -1203387136 -1290642033 -851981042 -648655823 -1699966984 -1493814...
result:
ok 1000 numbers
Test #2:
score: 10
Accepted
time: 516ms
memory: 43700kb
input:
5 94253 6998801 88374 94432 21568 79110 3746 94223 86214 12083 54743 1622 16110 18595 18994 3665 547...
output:
6999125 764376403 718240695 1381649585 885156744
result:
ok 5 number(s): "6999125 764376403 718240695 1381649585 885156744"
Test #3:
score: 10
Accepted
time: 19ms
memory: 16844kb
input:
5 120 -848255662 53358 95098 92852 36846 80052 83050 44071 22632 50005 52339 7339 38495 66618 6337 5...
output:
-11025209476 -3953017107 -5975377615 -2466586019 -5823678268
result:
ok 5 number(s): "-11025209476 -3953017107 -5975377615 -2466586019 -5823678268"
Test #4:
score: 10
Accepted
time: 10ms
memory: 16900kb
input:
5 100 -964452256 94167 36596 60051 82090 55625 56197 94589 29844 14929 68497 81714 90264 66283 96767...
output:
-7714370390 -19569375783 -554464800 -1059581333 -6827008162
result:
ok 5 number(s): "-7714370390 -19569375783 -554464800 -1059581333 -6827008162"
Test #5:
score: 10
Accepted
time: 36ms
memory: 18716kb
input:
5 984 -715414516 65632 15191 55392 53178 88695 20308 44882 16528 12986 81169 76880 2239 81264 13866 ...
output:
-72952473687 -64021627506 -700730085 -994178012 -1624804963
result:
ok 5 number(s): "-72952473687 -64021627506 -700730085 -994178012 -1624804963"
Test #6:
score: 10
Accepted
time: 1433ms
memory: 125332kb
input:
5 83593 -175988991 46605 26358 5204 30137 41225 11710 75224 14130 56433 62524 29873 59483 22318 2619...
output:
-1656361289384 -4920133073293 -1028097824 -2809116480 -22668175189
result:
ok 5 number(s): "-1656361289384 -4920133073293 ...097824 -2809116480 -22668175189"
Test #7:
score: 10
Accepted
time: 1581ms
memory: 135864kb
input:
5 96302 -451340376 2672 47391 49737 61648 38099 10679 28316 91168 97182 40556 20560 89630 45931 9187...
output:
-4877361987440 -9327808595024 -261498007 97842263 -37427524204
result:
ok 5 number(s): "-4877361987440 -9327808595024 -261498007 97842263 -37427524204"
Test #8:
score: 10
Accepted
time: 1535ms
memory: 136908kb
input:
5 82075 -915749780 41503 94470 21657 60519 10090 65640 80911 29436 63096 68715 79609 87499 26240 606...
output:
-8500967499879 -2162204721519 -803472133 -6968294203 -60694304098
result:
ok 5 number(s): "-8500967499879 -2162204721519 ...472133 -6968294203 -60694304098"
Test #9:
score: 10
Accepted
time: 1388ms
memory: 125856kb
input:
5 86206 -158351237 12910 53574 97622 75378 61116 40492 87106 60678 72614 2146 43673 15147 23123 7469...
output:
-1508037508585 -4714642449519 -3202809425 -6778545312 -12974512083
result:
ok 5 number(s): "-1508037508585 -4714642449519 ...809425 -6778545312 -12974512083"
Test #10:
score: 10
Accepted
time: 1370ms
memory: 122112kb
input:
5 87683 -236086252 88768 76878 54808 98282 70961 83599 48353 34381 40413 95288 24241 74500 52966 994...
output:
-2319782085288 -10990638538852 -1651187059 -12428157994 -22719490815
result:
ok 5 number(s): "-2319782085288 -10990638538852...87059 -12428157994 -22719490815"
Extra Test:
score: 0
Extra Test Passed