SPOJ 416 - Divisibility by 15(贪心)
糟烂的代码啊... 这个题目思路很简单——末位只可能为0和5,所有数字的和肯定被3整除
没有0和5的肯定不行
否则,把所有数字求和
如果被3整除,则从大到小输出
如果除3余1,则按以下顺序——删1;删4;删7;删2、5、8中的2个(特别注意如果没有0要保留一个5)
如果除3余2,则按以下顺序——删2;删5(特别注意如果没有0要保留);删8;删1、4、7中的2个
下面是糟烂的代码——
//糟烂代码总结 —— 没有章法,思路不清,逻辑性太高,导致找不出错 //以后写代码引以为戒 #include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
char s[1010];
int num[12];
int check(int sum)
{
if(!num[0]&&!num[5])return 0;
if(sum==0)return 1;
if(num[0])return 1;
if(sum%3==1)
{
if(num[1]==0&&num[4]==0&&num[7]==0&&(num[2]+num[5]+num[8]<2))
{
return 0;
}
}
else if(sum%3==2)
{
if(num[5])
{
if(num[2]==0&&num[5]<=1&&num[8]==0&&(num[1]+num[4]+num[7]<2))
{
return 0;
}
}
else
{
if(num[2]==0&&num[5]==0&&num[8]==0&&(num[1]+num[4]+num[7]<2))
{
return 0;
}
}
}
return 1;
}
int solve(int sum)
{
int ct=0;
if(sum==0)
{
printf("0\n");return 0;
}
if(sum%3==1)
{
ct=1;
if(num[1]){num[1]--;sum-=1;ct--;}
else if(num[4]){num[4]--;sum-=4;ct--;}
else if(num[7]){num[7]--;sum-=7;ct--;}
else
{
ct=2;
if(num[0]==0)
{
for(int i=2; i<=8; i+=3)
{
if(ct==0)break;
if(i==5&&num[i]==1)continue;//此处写错导致错误(原来是写的num[5]==1,影响到了8)
while(num[i]>0)
{
num[i]--;
ct--;
sum-=i;
if(ct==0)break;
if(i==5&&num[i]==1)break;
}
}
}
else
{
for(int i=2; i<=8; i+=3)
{
if(ct==0)break;
while(num[i]>0)
{
num[i]--;
ct--;
sum-=i;
if(ct==0)break;
}
}
} }
if(ct>0)
{
printf("impossible\n");
return 0;
}
}
else if(sum%3==2)
{
ct=1;
if(num[2]){num[2]--;sum-=2;ct--;}
else if(num[5]==1&&num[0]>0){num[5]--;sum-=5;ct--;}
else if(num[5]>1){num[5]--;sum-=5;ct--;}
else if(num[8]){num[8]--;sum-=8;ct--;}
else
{
ct=2;
for(int i=1; i<=7; i+=3)
{
if(ct==0)break;
while(num[i]>0)
{
num[i]--;
ct--;
sum-=i;
if(ct==0)break;
}
}
}
if(ct>0)
{
printf("impossible\n");
return 0;
}
}
if(num[0])
{
if(sum==0)printf("0");
else
for(int i=9; i>=0; i--)
{
for(int j=0; j<num[i]; j++)
printf("%d",i);
}
printf("\n");
}
else
{
num[5]--;
for(int i=9; i>=0; i--)
{
for(int j=0; j<num[i]; j++)
printf("%d",i);
}
printf("5\n");
}
}
int main()
{
int T;
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&T);
while(T--)
{ scanf("%s",s);
int l=strlen(s);
memset(num,0,sizeof(num));
int sum=0;
for(int i=0; i<l; i++)
{
num[s[i]-'0']++;
sum+=s[i]-'0';
}
if(!check(sum))
{
printf("impossible\n");
}
else
{
solve(sum);
}
}
return 0;
}
SPOJ 416 - Divisibility by 15(贪心)的更多相关文章
- SPOJ 416 Divisibility by 15 细节题
一个结论:一个数,如果它的所有数字之和能被3整除,那么这个数也能被3整除. 最后一位肯定是0或者5,如果没有就impossible. 剩下的就是,如何删除尽量少的数,使所有数字之和为3的倍数. 情况比 ...
- spoj 416
又臭又长的烂代码 ...... #include <iostream> #include <cstdio> #include <cstring> #include ...
- 【贪心】【Uva11729】 Commando War
你有n个部下,每个部下需要完成一项任务.第i个部下需要你花Bi分钟交待任务,然后他会立刻独立地.无间断地执行Ji分钟后完成任务.你需要选择交待任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任 ...
- Team Foundation Server 2013 with Update 3 Install LOG
[Info @10:14:58.155] ====================================================================[Info @ ...
- 「PKUSC2018」主斗地(暴搜)
这道斗地主比 \(PKUWC\) 那道可做多了... 我们用 \(NOIP\) 那道斗地主的思路:暴搜出三代和四代,贪心出散牌. 还有jry为什么要出xx网友而不出他的另一个老婆 我们发现两个人的每回 ...
- (2) 我的结果- spec2006中精确的simulation points运行点
spec06中获取simpoints的环境说明: spec的版本号为spec2006v1.0; 使用ref input with runspec; 100millions为周期生成的simpoints ...
- Bayesian Optimization使用Hyperopt进行参数调优
超参数优化 Bayesian Optimization使用Hyperopt进行参数调优 1. 前言 本文将介绍一种快速有效的方法用于实现机器学习模型的调参.有两种常用的调参方法:网格搜索和随机搜索.每 ...
- SPOJ Find the max XOR value(二进制,贪心即可)
You have two integers L and R, and you are required to find the max xor value of a and b where L < ...
- 【2019.8.15 慈溪模拟赛 T1】插头(plugin)(二分+贪心)
二分 首先,可以发现,最后的答案显然满足可二分性,因此我们可以二分答案. 然后,我们只要贪心,就可以验证了. 贪心 不难发现,肯定会优先选择能提供更多插座的排插,且在确定充电器个数的情况下,肯定选择能 ...
随机推荐
- 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )
SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...
- PHP Sessions
PHP Sessions PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置.Session 变量存储单一用户的信息,并且对于应用程序中 ...
- JS实现Tab切换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java数据库连接类,已经把数据库操作的方法都封装好了
在这里分享一个已经封装好了的java数据库连接类,只要创建对象就可以实现数据库的增删改查操作,用过都说好.其实这个不是我自己写的,是一个理解和学习能力超高的朋友写的,他也很乐于分享交流,本人也深受他的 ...
- HDU 3721 Building Roads (2010 Asia Tianjin Regional Contest) - from lanshui_Yang
感慨一下,区域赛的题目果然很费脑啊!!不过确实是一道不可多得的好题目!! 题目大意:给你一棵有n个节点的树,让你移动树中一条边的位置,即将这条边连接到任意两个顶点(边的大小不变),要求使得到的新树的直 ...
- Secure CRT 如何连接虚拟机里面的CentOS系统——当主机使用无线网的时候 作者原创 欢迎转载
第一步:设置自己的无线网,并且分享给VM8这个虚拟网卡 第二步:查看VM8网卡的IP地址,如图是192.168.137.1 第三步:设置虚拟机的配置:选择VM8网卡并且是NAT的 第四步:设置虚拟机里 ...
- jQuery get/post区别及contentType取值
1.GET访问 浏览器 认为 是等幂的 就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配]所以 第二次访问的时候 如果 URL字符串没变化浏览器是直接拿出了第一次访问的结果,表 ...
- Js配合CSS实现的图片居中
CSS图上居中很好实现,但万恶的浏览器之间各不相让,搞的不兼容,还好我们有让其兼容的办法,那就是结合JS来实现,这样各个浏览器都听话多了.本例就是CSS结合JavaScript实现的图片垂直.水平方向 ...
- JavaScript 阻止事件冒泡的实现方法
JavaScript 阻止事件冒泡,无使用其它插件来辅助,原生JS代码,考虑到浏览器的兼容性问题,这里对IE/火狐.Operating以及Chrome都有针对性的判断,代码如下: function c ...
- php把数组保存成文件格式
php把数组保存为文件格式的函数实例,或许有的还没听说过可以把数组保存成文件,其实这样做也是另有它用的,两种方法各有千秋,有兴趣的PHP爱好者敬请参阅: $file="./cache/fil ...