博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客练习33 C Tokitsukaze And Number 【同余,暴力】
阅读量:6336 次
发布时间:2019-06-22

本文共 1274 字,大约阅读时间需要 4 分钟。

题意:给出整数n,将n的数位重新排列,使得排列后的数字被8整除,并且尽量的大,不包含前导0.  n<=10^100.

因为1000≡0(mod 8) 所以一个数x末3位被8整除,则x被8整除.

 

n<=10^100 字符串读入,并且存储每个数位的个数.

枚举最后3位数, 判断n是否有这三个数位后, 将剩下的数位从大到小存到字符串,然后直接比较即可.   

#include 
using namespace std;typedef long long ll;typedef pair
ii;const int N=2e5+5;string str,res;int T,b[11],c[5],flag;void fun(int x){ string a; for(int i=1;i<=3;i++){ b[c[i]]--; if(b[c[i]]<0){ for(int j=1;j<=i;j++) b[c[j]]++; return; } } for(int i=9;i>=0;i--) for(int j=1;j<=b[i];j++) a+=i+'0'; for(int i=3;i>=1;i--) a+=c[i]+'0'; for(int i=1;i<=3;i++) b[c[i]]++; if(a[0]=='0') return; if(res
>T; while(T--){ memset(b,0,sizeof(b)); res=""; flag=0; cin>>str; int len=str.length(); if(len==1) { if(str[0]=='8'||str[0]=='0') cout<
<<'\n'; else cout<<-1<<'\n'; continue; } if(len==2){ int s1=str[0]-'0' + (str[1]-'0')*10; int s2=(str[0]-'0')*10 +str[1]-'0'; int s=-1; if(s1%8==0) s=s1; if(s2%8==0&&s
=3){ for(int i=0;str[i];i++) b[str[i]-'0']++; for(int i=0;i<1000;i++){ int x=i; if(x%8) continue; check(x); } } if(flag) cout<
<<'\n'; else cout<<-1<<'\n'; } return 0;}

  

 

转载于:https://www.cnblogs.com/HIKARI1149/p/10095237.html

你可能感兴趣的文章
人类投资经理再也无法击败电脑的时代终将到来了...
查看>>
一个最小手势库的实现
查看>>
HoloLens开发手记 - Vuforia开发概述 Vuforia development overview
查看>>
Android支付之支付宝封装类
查看>>
<亲测>CentOS中yum安装ffmpeg
查看>>
【分享】马化腾:产品设计与用户体验
查看>>
【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练
查看>>
全智慧的网络:思科十年来最具颠覆性的创新
查看>>
怎样将现有应用迁移到 VMware NSX
查看>>
赛门铁克收购以色列移动安全初创公司Skycure 旨在构建网络安全防御平台
查看>>
《Photoshop蒙版与合成(第2版)》目录—导读
查看>>
《团队软件过程(修订版)》—第1章1.3节TSPi的设计
查看>>
“最佳人气奖”出炉!4月27号,谁能拿到阿里聚安全算法挑战赛的桂冠?
查看>>
《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——2.6 图层与图层样式...
查看>>
《iOS组件与框架——iOS SDK高级特性剖析》——第2章,第2.7节获取线路
查看>>
Spring中 @Autowired标签与 @Resource标签 的区别
查看>>
人工智能凭什么毁灭人类
查看>>
[LeetCode]--349. Intersection of Two Arrays
查看>>
tomcat启动报错
查看>>
mongorocks引擎原理解析
查看>>