求查错啊555
查看原帖
求查错啊555
120911
Lynkcat楼主2020/9/7 22:30
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define dd ch=getchar()
inline ll read()
{
	ll x=0;char dd;bool f=false;
	while(!isdigit(ch))f|=ch=='-',dd;
	while(isdigit(ch))x=(x<<1)+(x<<3)+ch-48,dd;
	return f?-x:x;
}
#undef dd
void write(ll x)
{
	if(x<0)x=-x,putchar('-');
	if(x>9)write(x/10);
	putchar(x%10+48);
}
#define writeln(x) (write(x),putchar('\n'))
#define writesp(x) (write(x),putchar(' '))
int Q,n,m,p,sum[30],ans[30];
double tt;
bool bl;
void zu(int x,int y,int p,int ppp)
{
	//if (x==0) cout<<x<<" "<<y<<" "<<p<<" "<<ppp<<endl;
	memset(sum,0,sizeof(sum));
	int xx=x;
	while (x!=0)
	{
		if (x<0) return;
		sum[0]++;
		if (sum[0]==1&&y!=-1) sum[sum[0]]=(ppp==0)?min(y,x):y;
		else if (sum[0]<=p) sum[sum[0]]=9; else 
		if (sum[0]-p==1) sum[sum[0]]=min(8,x); else sum[sum[0]]=min(9,x);
		x-=sum[sum[0]];
		//if (xx==2) cout<<sum[0]<<" "<<sum[sum[0]]<<endl;
	}
	if (xx==0) sum[0]++,sum[sum[0]]=0;
	if (sum[0]<p) return;
	//if (xx==14) for (int i=sum[0];i>=1;i--) cout<<sum[i];
	//cout<<endl;
	if (sum[0]<ans[0]&&sum[0]!=0)
	{
		for (int i=0;i<=20;i++) ans[i]=sum[i];
	} else
	{
		bl=1;
		for (int i=20;i>=1;i--)
		  if (sum[i]>ans[i]) 
		  {
		  	bl=0;break;
		  } else if (sum[i]<ans[i])
		  {
		  	break;
		  }
		if (bl) for (int i=0;i<=20;i++) ans[i]=sum[i];
	}
}
int main(){
	//freopen("wh.in","r",stdin);
	//freopen("wh.out","w",stdout);
    Q=read();
    while (Q--)
    {
    	n=read();m=read();memset(ans,0x3f,sizeof(ans));
    	if (m==0) zu(n,-1,-1,0); 
		else
    	{
    	tt=(double)(n-(m*m+m)/2)/(m+1);
    	if (abs((int)tt-tt)<=1e-5&&tt>=0)
    		zu((int)tt,9-m,0,0);p=0;
    	for (int i=1;i<=18;i++)
    	{
    	  p=p+9;
    	  for (int j=1;j<=m;j++)
    	  {
    	  	tt=(double)((n+(m-j+1)*p)-(m*m+m)/2)/(m+1);
    	  	if (abs((int)tt-tt)<=1e-5&&tt>=0&&tt<=n){
    		zu((int)tt,9-j+1,i,1);}
    	  }
        }
        }
    	if (ans[0]!=0x3f3f3f3f&&n>=m) {for (int i=ans[0];i>=1;i--) cout<<ans[i];cout<<"\n";}
    	else cout<<-1<<endl;
    }		
    //fclose(stdin);
    //fclose(stdout);
	return 0;
}
/*
7
1 0
1 1
42 7
13 7
99 1
99 0
99 2
*/
2020/9/7 22:30
加载中...