【2016杭电女生赛1009】【挖掘本质找关系 模拟】sum 找到最小的正整数,满足a乘sum(n)==b乘S(2n)
来源:互联网 发布:php留言板视频教程 编辑:程序博客网 时间:2024/05/01 03:42
#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>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,y,sizeof(x))#define MP(x,y) make_pair(x,y)#define ls o<<1#define rs o<<1|1typedef 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); 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)a,b的范围都在[1,100]【类型】暴力【分析】这道题目的结果可能非常大,所以我们直接枚举n是要GG的。首先可以有这样的基础性结论:设gcd(a,b)=g, 我们可以先使得b=b/g, a=a/gS(n):S(2n)==b:a,那么我们有S(n):S(2n)=b:a。然后,一个好的做法是,我们研究本质问题。我们发现,如果一个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的比例关系。然后模拟一遍即可。怎么模拟呢?我们不妨假设答案n仅有长度为L,且每一位都是5然后得到了把数位和sum分撒出去。对于sum余下的数值,我们依次加到尾巴上。如果sum最后把长度为L的字串都填充为'9'之后,还有剩余,那么在前面贪心填充。*/
0 0
- 【2016杭电女生赛1009】【挖掘本质找关系 模拟】sum 找到最小的正整数,满足a乘sum(n)==b乘S(2n)
- 给定一个正整数n,要求找到最小的x(x>0)满足2^x mod n = 1。
- 在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- 在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- 在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- 在由N个正整数的集合S中,找出最大元素M,满足M=A + B,其中A,B都是集合S中元素
- [经典面试题][百度]在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- sum=2+5+8+11+14+…,输入正整数n,求sum的前n项和。
- (c++)sum=2+5+8+11+14+…,输入正整数n,求sum的前n项和。
- 输出满足n=a!+b!+c!的所有三位数
- SEERC15 求一个正整数n,使得a+n和b+n的LCM值最小
- 找到大于一个正整数N的最小2的次幂数
- 数论模板 满足a^x≡1(mod n)的最小正整数
- 题解:求满足条件n=a!+b!+c!的所有三位数n并输出
- 求满足n=a!+b!+c!的所有三位数n
- 满足1+2+3+n<8888的最大正整数n
- 2乘n铺骨牌
- 【2016杭电女生赛1003】【暴力】Luck Competition 选数平均数乘2除3 小且最接近的数
- BATCHSQL--GoldenGate Parameter
- 【java SE基础】Java线程详解
- asynctask
- LIBSVM在matlab下的使用安装
- Arduino 101 IMU测试及问题
- 【2016杭电女生赛1009】【挖掘本质找关系 模拟】sum 找到最小的正整数,满足a乘sum(n)==b乘S(2n)
- Hibernate_一级缓存_Demo
- Linux C笔记之 作用域 详解
- [Java] 作业6(字符串)
- threejs(二) 移动,相机
- get请求和post请求的区别
- 【教程】Ubuntu安装cryptominisat教程
- 【2016杭电女生赛1010】【旅行商问题DP + 贪心】Ingress 最多走L距离 最多hackK次 的最大得分
- Android Drawable - Level List Drawable使用详解(附图)