[HDU 5710]Digit-Sum:其他
来源:互联网 发布:单片机高八位低八位 编辑:程序博客网 时间:2024/06/15 17:43
点击这里查看原题
可以从*2后各位数和的变化来考虑,如果某一位≥5,那么 *2后必然会进位,于是本位-10,前一位+1,总共减少9,因此我们只需要考虑两个问题:
- 数字总和应该是多少?
- 应该有多少位>4?
其实这两个问题可以同时解决,设S(n)=x,则S(2n)=2x-9k,k为正整数,那么,(2b-a)/9b*x一定为正整数,因此,可以设c=2b-a,d=9b,求gcd(c,d),则S(n)=d/gcd,大于4的位数t=c/gcd,然后从低位往高位填数即可。
/*User:SmallLanguage:C++Problem No.:5710*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;int num[205],len,now,a,b;int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int main(){ freopen("data.in","r",stdin);// ios::sync_with_stdio(0); int t; cin>>t; while(t--){ memset(num,0,sizeof(num)); len=now=0; cin>>a>>b; if(a>2*b||b>5*a){ cout<<0<<endl; continue; } if(a==2*b){ cout<<1<<endl; continue; } int c=2*b-a,d=9*b,g=gcd(c,d);; c/=g; d/=g; len=c; for(int i=1;i<=len;i++){ num[i]=5; d-=5; } while(d){ num[++now]+=min(4,d); d-=min(4,d); } for(int i=max(len,now);i;i--) cout<<num[i]; cout<<endl; } return 0;}
0 0
- [HDU 5710]Digit-Sum:其他
- HDU 5710 Digit-Sum
- HDU 5710 Digit-Sum
- HDU 5710 Digit-Sum
- Hdu 5710 Digit-Sum【思维】
- HDU 5710 Digit-Sum 数学杂题
- HDU 5710 Digit-Sum (构造)
- Digit-Sum HDU
- 5710 Digit-Sum(找规律)
- lucky sum of digit
- [projecteuler]Factorial digit sum
- Sicily 7969. Digit Sum
- HDU5710-Digit-Sum
- UVALive6497 Digit Sum【贪心】
- cc Minimal Weighted Digit Sum
- Problem 16:Power digit sum
- Problem 20:Factorial digit sum
- Problem 16:Power digit sum
- 怎样访问异常信息
- Google 的android-architecture,todo-mvp解析
- 数据结构(17)——基于邻接表的基本操作:构造,深搜(DFS),广搜(BFS)
- 两个整数相除
- 自定义的异常类
- [HDU 5710]Digit-Sum:其他
- 1 Tomcat常用配置
- 设计模式概述
- linux删除用户及其所在工作目录
- Mysql 数据库优化总结
- 回收资源利器-finally
- ui-grid应用(调整了表格行高)+指定列模糊查询+联动搜索
- 动态规划算法
- 采用OLEDB读取EXCEL文件