在线狂躁,如何判无解?
  • 板块P1988 火炬
  • 楼主松风之狐
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/9/24 19:49
  • 上次更新2023/11/5 12:41:06
查看原帖
在线狂躁,如何判无解?
135458
松风之狐楼主2020/9/24 19:49

题目传送门-->P1988 火炬

请问这道题真的有无解情况吗,无解又是如何判断的呢,能否提供一组无解的数据呢?

如有解答,不胜感激。

以下为本人代码,只有50pts:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int a,d;
int v[5050000];
string c;
string b;
queue<pair<string,int> > q;
void bfs()
{
	q.push(make_pair("1",1));
	v[1]=1;
	while(!q.empty())
	{
		string s=q.front().first;
		int mod=q.front().second;
		q.pop();
		if(mod==0){c=s;break;}
		if(v[mod*10%a]==0){v[mod*10%a]=1,q.push(make_pair(s+"0",mod*10%a));}
		if(v[(mod*10+1)%a]==0){v[(mod*10+1)%a]=1,q.push(make_pair(s+"1",(mod*10+1)%a));}
	}
}
int main()
{
	scanf("%d",&a);
	bfs();
	int len=c.size();
	for(int i=0;i<len;i++)
	{
		d=d*10+c[i]-'0';
		if(d>=a) b+=(d/a)+'0';
		d%=a;
	}
	if(!v[0]) cout<<"No Solution"<<endl;
    //如果没有c对a的余数为0,则无解。
	else cout<<b<<endl;
	return 0;
}
2020/9/24 19:49
加载中...