QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#1579#924621#9738. Make It DivisiblewallcrackwallcrackFailed.2025-03-03 12:14:422025-03-03 12:14:42

Details

Extra Test:

Invalid Input

input:


output:


result:

FAIL Unexpected white-space - token expected (stdin, line 1)

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#924621#9738. Make It DivisiblewallcrackAC ✓80ms6528kbC++201.4kb2025-03-03 12:08:572025-03-03 12:08:57

answer

#include<bits/stdc++.h>
using namespace std;
int T;
void solve(int testcase)
{
	long long n,k;
	cin>>n>>k;
	vector<int> a(n);
	for(int i=0;i<n;i++)cin>>a[i];
	int maxv=*max_element(a.begin(),a.end());
	int minv=*min_element(a.begin(),a.end());
	if(n==1 or maxv==minv)
	{
		cout<<k<<" "<<(1+k)*k/2<<endl;
		return ;
	}
	stack<int> sta;
	set<pair<int,int>> checkList;
	for(int i=0;i<n;i++)
	{
		while(sta.size() and sta.top()>=a[i])
			sta.pop();

		if(sta.size())
			checkList.insert({a[i],sta.top()});
		sta.push(a[i]);
	}
	while(sta.size())sta.pop();
	for(int i=n-1;i>=0;i--)
	{
		while(sta.size() and sta.top()>=a[i])
			sta.pop();
		if(sta.size())
			checkList.insert({a[i],sta.top()});
		sta.push(a[i]);
	}
	auto generate=[&k](int x,int y)
	{
		if(x<y)swap(x,y);
		vector<int> fir,sec;
		for(int i=1;i<=sqrt(x-y);i++)
		{
			if((x-y)%i==0)fir.push_back(i);
			if((x-y)/i!=i)fir.push_back((x-y)/i);
		}
		for(auto ri:fir)
			if(ri-y>=1 and ri-y<=k)
				sec.push_back(ri-y);
		return sec;
	};
	long long cnt=0,sum=0;
	auto x=generate(maxv,minv);
	for(int xi:x)
	{
		bool flag=true;
		for(auto [u,v]:checkList)
		{
			if((u+xi)%(v+xi)!=0)
			{
				flag=false;
				break;
			}
		}
		if(flag)
		{
			cnt++;
			sum+=xi;
		}
	}
	cout<<cnt<<" "<<sum<<endl;
}
int main()
{
	ios::sync_with_stdio(false);
	cin>>T;
	for(int i=1;i<=T;i++)solve(i);
	return 0;
}