sicily 4424
来源:互联网 发布:淘宝喵喵折 编辑:程序博客网 时间:2024/06/06 02:45
题目链接:sicily 4424
解题思路:
先找到符合lucky number位数要求最小的数,然后枚举所有可能性,最小的符合要求的数即为答案。枚举方法使用全排列的next_permutation算法思想,生成全排列中下一个数。
代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int n, len,num[15];int calc(int n){ int len=0; while(n){ n/=10; n/=10; len++; } return len;}pair<long long,long long> sum(){ long long res1=0,res2=0; for(int i=0;i<len;i++) res1 = res1*10 + num[i]; for(int i=len-1;i>=0;i--) res2 = res2*10 + num[i]; return make_pair(res1,res2);}void next(){ int i,j,k=0; for(i=len-2;i>=0;i--) if(num[i]<num[i+1]) { k=1; break; } if(!k) return; for(j=len-1;j>i;j--) if(num[i]<num[j]) break; swap(num[i],num[j]); for(k=i+1;k<=(i+len)/2;k++) swap(num[k], num[i+len-k]);}long long solve(){ pair<long long,long long> res=sum(); long long res1=res.first, res2=res.second; while(res1<n) { if(res1==res2) break; next(); res1 = sum().first; } if(res1<n){ len=len/2+1; for(int i=0;i<len;i++) num[i]=4, num[i+len]=7; len*=2; res1=sum().first; } return res1;}int main(){ int T; scanf("%d",&T); while(~scanf("%d",&n)) { len=calc(n); for(int i=0;i<len;i++) num[i]=4, num[i+len]=7; len*=2; printf("%lld\n",solve()); } return 0;}
0 0
- sicily 4424
- Sicily 1027
- sicily 1007
- sicily 1795
- sicily 1036
- sicily 1419
- sicily 1889
- sicily 1684
- sicily 1686
- sicily 1004
- sicily 1135
- sicily 1152
- sicily 1151
- sicily 1002
- sicily 1156
- sicily 1424
- sicily 分类
- sicily 1090
- reflect(反射)
- 正则表达式在文本过滤中的使用
- android中对线程池的理解与使用
- line-height,text-align设置文字水平垂直居中
- 练习三 1006
- sicily 4424
- 第十/十一周项目二(2)-储存班长信息的学生类
- [2012-2013ACM-ICPC,NEERC,Western Subregional Contest]Pattern Matching/[JZOJ3427]归途与征程
- JavaScript正则表达式大全(过滤Emoji的最佳实践)
- 抖动算法图像转换
- 1041. 考试座位号(15)
- LAMP环境搭建
- AngularJS 使用总结
- 引入了junit为什么还是用不了@Test注解