加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【2016杭电女生赛1009】【未完成 细节待编辑★ 挖掘本质找关系

发布时间:2021-03-15 16:16:07 所属栏目:大数据 来源:网络整理
导读:#includestdio.h#includeiostream#includestring.h#includestring#includectype.h#includemath.h#includeset#includemap#includevector#includequeue#includebitset#includealgorithm#includetime.h#includeassert.husing namespace std;void fre() { freo

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<ctype.h>
#include<math.h>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
#include<assert.h>
using namespace std;
void fre() { freopen("c://test//input.in","r",stdin); freopen("c://test//output.out","w",stdout); }
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,sizeof(x))
#define MP(x,y) make_pair(x,y)
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T1,class T2>inline void gmax(T1 &a,T2 b) { if (b>a)a = b; }
template <class T1,class T2>inline void gmin(T1 &a,T2 b) { if (b<a)a = b; }
const int N = 1010,M = 0,Z = 1e9 + 7,ms63 = 0x3f3f3f3f;
int casenum,casei;
int a,b;
int gcd(int x,int y)
{
	return y == 0 ? x : gcd(y,x%y);
}
void gcdit(int &x,int &y)
{
	int g = gcd(x,y);
	x /= g; y /= g;
}
char s[N];
void solve(int sum,int len)
{
	if (len * 5 > sum) { puts("0"); return; }
	gcdit(sum,len);
	MS(s,0);
	sum -= len * 5;
	for (int i = 0; i < len; ++i)s[i] = '5';
	for (int i = 0; i < len; ++i)
	{
		int plus = min(sum,4);
		sum -= plus;
		s[i] += plus;
	}
	while (sum >= 4)s[len++] = '4',sum -= 4;
	if (sum)s[len++] = '0' + sum;
	reverse(s,s + len);
	puts(s);
}
int main()
{
	scanf("%d",&casenum);
	for (casei = 1; casei <= casenum; ++casei)
	{
		scanf("%d%d",&a,&b); 
		assert(a >= 1 && a <= 100);
		assert(b >= 1 && b <= 100);
		if (a == 2 * b) { puts("1"); continue; }
		if (a > 2 * b) { puts("0"); continue; }
		gcdit(a,b);
		int sum = 9 * b;
		int len = 2 * b - a;
		solve(9 * b,2 * b - a);
	}
	return 0;
}
/*
【题意】
我们要找出最小的正整数n满足——
a*S(n)==b*S(2n)

【类型】
暴力

【分析】
我们直接枚举n是要GG的
设gcd(a,b)=g,b=b/g,a=a/g
S(n):S(2n)==b:a,那么我们有S(n):S(2n)=b:a
我们可以枚举S(n),即直接枚举b的倍数。
然而这种做法依然比较难处理。

=========================================
一个好的做法是,我们研究本质问题。
我们发现,如果一个digit是0~4,那么*2的效益是完全获得的。
如果一个digit的是5~9,那么*2后会损失9的收益。
a*S(n) == b*S(2n),

我们假设有l的长度是[0,4]范围,有L的长度是[5,9]范围
那么显然满足:
S(2n)=S(n)*2-L*9
替换一下——
a*S(n) == b*(2S(n)-L*9)
a*S(n) == 2b*S(n) -L*9*b
(2b-a)*S(n) == L*9*b

9*b:2b-a = S(n):L
也就是说,我们得到了S(n)与L的比例关系。
然后模拟一遍即可。

*/

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!