Codeforces Round #277.5 (Div. 2) C. Given Length and Sum of Digits...
2016-08-16 17:36
726 查看
http://codeforces.com/problemset/problem/489/C
题意:给两个数N和S,让你构造一个数,这个数是N位的,且这个数的所有位之和为S,如果能构造,输出最大的和最小的数,如果不能构造,则输出-1 -1.
做法:对于最大数的构造,只要从最高位开始,能放多少就放多少,放到不能放为止。对于最小数的构造,第一位先放1,然后从最后一位开始放,注意几种特殊情况的判断。
题意:给两个数N和S,让你构造一个数,这个数是N位的,且这个数的所有位之和为S,如果能构造,输出最大的和最小的数,如果不能构造,则输出-1 -1.
做法:对于最大数的构造,只要从最高位开始,能放多少就放多少,放到不能放为止。对于最小数的构造,第一位先放1,然后从最后一位开始放,注意几种特殊情况的判断。
#include <bits/stdc++.h> #define _ ios_base::sync_with_stdio(0);cin.tie(0); #define INF 0x3f3f3f3f #define eps 1e-6 typedef long long LL; const double pi = acos(-1.0); const long long mod = 1e9 + 2015; using namespace std; int a[105]; int b[105]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); //freopen("int.txt","r",stdin); //freopen("out.txt","w",stdout); int N,S; cin >> N >> S; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); int S1 = S; if(S == 0 && N == 1) puts("0 0"); else if(S == 0 || S > 9 * N) puts("-1 -1"); else { for(int i = 1;i <= N;i++) { if(S == 0) a[i] = 0; else { a[i] = min(9,S); S -= a[i]; } } b[1] = 1; S1 -= 1; for(int i = N;i > 0;i--) { if(S1 == 0) b[i] += 0; else { b[i] += min(9,S1); S1 -= b[i]; } } for(int i = 1;i <= N;i++) printf("%d",b[i]); printf(" "); for(int i = 1;i <= N;i++) printf("%d",a[i]); puts(""); } return 0; }
相关文章推荐
- Android Device Monitor查看进程中的有多少个线程在搞
- Next Permutation
- ActivityManager(4)—isLowRamDevice ()
- 图文详解Java中class的初始化顺序
- Linux文件系统-02存储设备分区
- hibernate 通过Restrictions设置中文查询条件,不执行无结果集的问题
- javaee三
- 神经网络的matlab使用
- react img 标签必须闭合,否则报错
- Java 架构师推荐书籍
- 紧张:飞测独家のJmeter秘籍,限量发放
- oc和javascript互相调用
- 使用Zabbix批量监控网站可用性方案二
- android中values的良好实践
- javascript图片与加载处理基础详细讲解几种方法实现
- CAD+开发小结+交互+选择集+深度拷贝AcDbObjectId中指向的实体集+读取其他DWG文件
- 杭电1004——Let the Balloon Rise
- ComparatorChain对List对象的属性排序
- linux sudo命令
- Eclipse 性能和外观设置