QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#855996 | #9738. Make It Divisible | icpc_zhzx034# | WA | 1ms | 4504kb | C++14 | 2.2kb | 2025-01-13 14:29:13 | 2025-01-13 14:29:14 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> P;
#define fi first
#define se second
#define mkp make_pair
#define pb emplace_back
#define popcnt __builtin_popcountll
const ll mod = 998244353;
inline ll read(){
ll x=0, f=1; char ch=getchar();
while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0' && ch<='9') x=x*10+ch-'0', ch=getchar();
return x*f;
}
inline int lg2(int x){ return 31^__builtin_clz(x); }
inline ll lg2(ll x){ return 63^__builtin_clzll(x); }
inline void addmod(int &x){ if(x >= mod) x -= mod; }
inline void addmod(ll &x){ if(x >= mod) x -= mod; }
inline ll qpow(ll a,ll b){
ll ans=1, base=a;
while(b){
if(b&1) ans=ans*base%mod;
base=base*base%mod; b>>=1;
}
return ans;
}
inline ll INV(ll x){ return qpow(x, mod-2); };
unordered_map<ll,ll>mp;
ll cnt,p[50005],q[50005];
ll n,k,b[50005],lc[50005],rc[50005],stk[50005],tp;
void procedure(){
mp.clear(); memset(lc,0,sizeof(lc)); memset(rc,0,sizeof(rc));
tp=cnt=0;
n=read(),k=read();
for(ll i=1;i<=n;i++) b[i]=read();
for(ll i=1;i<=n;i++){
while(tp && b[stk[tp]]>b[i]){
lc[i]=stk[tp];
tp--;
}
if(tp) rc[stk[tp]]=i;
stk[++tp]=i;
}
for(ll i=1;i<=n;i++){
if(lc[i] && b[lc[i]] != b[i]){
p[++cnt] = b[i], q[cnt] = b[lc[i]];
}
if(rc[i] && b[rc[i]] != b[i]){
p[++cnt] = b[i], q[cnt] = b[rc[i]];
}
}
if(!cnt){
printf("%lld %lld\n", k, k*(k-1)/2);
return;
}
// p[1]+d | q[1]-p[1]
int x = q[1]-p[1];
vector<int>v;
ll ans=0, sum=0;
for(int d=1;d*d<=x;d++){
if(x%d) continue;
if(d>p[1] && d-p[1]<=k) v.pb(d-p[1]);
if(d*d==x) continue;
if((x/d)>p[1] && (x/d)-p[1]<=k) v.pb((x/d)-p[1]);
}
for(auto d: v){
bool flg=0;
for(int i=1;i<=n;i++){
if((q[i]+d)%(p[i]+d)){
flg = 1;
break;
}
}
if(!flg){
ans ++;
sum += d;
}
}
printf("%lld %lld\n", ans, sum);
}
int main(){
#ifdef LOCAL
assert(freopen("input.txt","r",stdin));
assert(freopen("output.txt","w",stdout));
#endif
ll T=read();
// math_init();
// NTT::init();
while(T--) procedure();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 4504kb
input:
3 5 10 7 79 1 7 1 2 1000000000 1 2 1 100 1000000000
output:
3 8 0 0 100 4950
result:
wrong answer 3rd lines differ - expected: '100 5050', found: '100 4950'