QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#863536 | #9738. Make It Divisible | 22016020736 | WA | 1ms | 8056kb | C++14 | 3.0kb | 2025-01-19 19:00:23 | 2025-01-19 19:00:23 |
Judging History
answer
#include<bits/stdc++.h>
#define int long long
using namespace std;
int arr[20000009];
int brr[20000009];
map<int,deque<int>>pos;
int st[2000009][30];
bool f;
void init(int n)
{
for(int i=1;i<30;i++)
{
for(int j=1;j+(1<<i)-1<=n;j++)
{
st[j][i]=min(st[j][i-1],st[j+(1ll<<(i-1))][i-1]);
}
}
}
int get(int l,int r)
{
int k=__lg(r-l+1);
return min(st[l][k],st[r-(1ll<<k)+1][k]);
}
void check(int l,int r,int val,int n)
{
if(!f) return ;
if(l>=r)
{
return ;
}
int mn=get(l,r);///1 4 3 4
//printf("l,r:%lld %lld %lld %lld\n",l,r,val,pos[mn].front());
//_sleep(1000);
// for(int i=l;i<=r;i++)
//{
// if( (brr[i]+val)%(mn+val)!=0) f=false;
//}
int pre=l-1;
for(auto x:pos[mn])
{
if(x-1>r) break;
// printf("11111\n");
if(pre+1<=x-1&&pre+1>=l&&x-1<=r)
{
int mx=get(pre+1,x-1);
if((mx+val)%(mn+val)!=0) f=false;
check(pre+1,x-1,val,n);
}
pre=x;
}
while(!pos[mn].empty()&&pos[mn].front()<=r) pos[mn].pop_front();
if(pre!=r)
{
int mx=get(pre+1,r);
if((mx+val)%(mn+val)!=0) f=false;
check(pre+1,r,val,n);
}
}
signed main() {
int tt=0;
//if(3%(1==0) ) printf("aaaaa\n");
scanf("%lld",&tt);
int tmpt=tt;
int t=0;
while(tt--)
{
t++;
int top=0;
set<int>stt;
int n,k;
scanf("%lld%lld",&n,&k);
pos.clear();
for(int i=1;i<=n;i++)
{
int x;
scanf("%lld",&x);
brr[i]=x;
stt.insert(x);
pos[x].push_back(i);
st[i][0]=x;
}
init(n);
for(int i=1;i<=n;i++)
{
// for(int j=i;j<=n;j++) printf("l,r:%d %d %d\n",i,j,get(i,j));
}
//return 0;
if(stt.size()==1)
{
int ans=k,sum=k*(k+1)/2;
printf("%lld %lld\n",ans,sum);
continue;
}
for(auto x:stt)
{
arr[++top]=x;
}
int mx=arr[2],nx=arr[1];
if(nx>=mx)
{
printf("0 0\n");
continue;
}
else
{
int shu=mx-nx;
set<int>xulie;
for(int i=1;i*i<=shu;i++)
{
if(shu%i==0)
{
if(i-nx>=1&&i-nx<=k)
xulie.insert(i-nx);
if(shu/i-nx>=1&&shu/i-nx<=k)
xulie.insert(shu/i-nx);
}
}
int ans=0,sum=0;
for(auto x:xulie)
{
f=true;
check(1,n,x,n);
pos.clear();
for(int i=1;i<=n;i++) pos[brr[i]].push_back(i);
//printf("777:%lld\n",pos[7].front());
// if(f) printf("x:%lld\n",x);
if(f) ans++,sum+=x;
}
printf("%lld %lld\n",ans,sum);
}
}
return 0;
}
/*
1000
4 1000000000
6 17 19 19
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 8012kb
input:
3 5 10 7 79 1 7 1 2 1000000000 1 2 1 100 1000000000
output:
3 8 0 0 100 5050
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 0ms
memory: 8056kb
input:
4 201 1000000000 1 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5...
output:
0 0 0 0 0 0 0 0
result:
ok 4 lines
Test #3:
score: -100
Wrong Answer
time: 1ms
memory: 8012kb
input:
500 4 1000000000 8 14 24 18 4 1000000000 17 10 18 14 4 1000000000 6 17 19 19 4 1000000000 15 14 15 25 4 1000000000 16 16 5 25 4 1000000000 4 30 20 5 4 1000000000 11 4 23 9 4 1000000000 14 25 13 2 4 1000000000 18 18 1 15 4 1000000000 22 22 22 28 4 1000000000 15 17 17 10 4 1000000000 22 14 13 25 4 100...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
wrong answer 474th lines differ - expected: '0 0', found: '3 14'