SPOJ 416 Divisibility by 15 细节题
一个结论:一个数,如果它的所有数字之和能被3整除,那么这个数也能被3整除。
最后一位肯定是0或者5,如果没有就impossible。
剩下的就是,如何删除尽量少的数,使所有数字之和为3的倍数。
情况比较多,注意考虑全面。
#include <cstdio>
#include <cstring>
#include <cstdlib> using namespace std; const int MAXN = ; char str[MAXN];
int cnt[];
int end; void OutPut()
{
bool ok = false;
for ( int i = ; i > ; --i )
{
for ( int j = ; j < cnt[i]; ++j )
{
if (i) ok = true;
printf( "%d", i );
}
} if ( ok )
{
for ( int i = ; i < cnt[]; ++i )
putchar('');
} if ( end == ) puts("");
else puts(""); return;
} bool solved( int sum )
{
int left = sum % ; //删一个数
if ( cnt[left] )
{
--cnt[left];
return true;
}
if ( cnt[ + left] )
{
--cnt[left + ];
return true;
}
if ( cnt[ + left ] )
{
--cnt[ + left ];
return true;
} //删两个数
if ( left == )
{
if ( cnt[] >= )
{
cnt[] -= ;
return true;
}
if ( cnt[] && cnt[] )
{
--cnt[], --cnt[];
return true;
}
if ( cnt[] >= )
{
cnt[] -= ;
return true;
}
if ( cnt[] && cnt[] )
{
--cnt[], --cnt[];
return true;
}
if ( cnt[] && cnt[] )
{
--cnt[], --cnt[];
return true;
}
if ( cnt[] >= )
{
cnt[] -= ;
return true;
}
}
else
{
if ( cnt[] >= )
{
cnt[] -= ;
return true;
}
if ( cnt[] && cnt[] )
{
--cnt[], --cnt[];
return true;
}
if ( cnt[] >= )
{
cnt[] -= ;
return true;
}
if ( cnt[] && cnt[] )
{
--cnt[], --cnt[];
return true;
}
if ( cnt[] && cnt[] )
{
--cnt[], --cnt[];
return true;
}
if ( cnt[] >= )
{
cnt[] -= ;
return true;
}
}
return false;
} int main()
{
//freopen( "in.txt", "r", stdin );
//freopen( "out.txt", "w", stdout );
int T;
scanf( "%d", &T );
while ( T-- )
{
scanf( "%s", str );
memset( cnt, , sizeof(cnt) );
for ( int i = ; str[i]; ++i )
++cnt[ str[i] - '' ]; if ( !cnt[] && !cnt[] )
{
puts("impossible");
continue;
} int sum = ;
for ( int i = ; i < ; ++i )
sum += i * cnt[i]; if ( cnt[] )
--cnt[], end = ;
else
--cnt[], end = ; if ( sum % == )
{
if ( sum == )
{
puts("");
continue;
}
OutPut();
}
else
{
if ( solved( sum ) ) OutPut();
else puts("impossible");
}
}
return ;
}
SPOJ 416 Divisibility by 15 细节题的更多相关文章
- SPOJ 416 - Divisibility by 15(贪心)
糟烂的代码啊... 这个题目思路很简单——末位只可能为0和5,所有数字的和肯定被3整除 没有0和5的肯定不行 否则,把所有数字求和 如果被3整除,则从大到小输出 如果除3余1,则按以下顺序——删1: ...
- Codeforces Round #392 (Div. 2)-758D. Ability To Convert(贪心,细节题)
D. Ability To Convert time limit per test 1 second Cmemory limit per test 256 megabytes input standa ...
- 【线段树 细节题】bzoj1067: [SCOI2007]降雨量
主要还是细节分析:线段树作为工具 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小 ...
- zoj 3745 Salary Increasing(坑爹的细节题!)
题目 注意题目中的,引用绝望的乐园中的进一步解释如下: 这是一道浙大月赛的题,一如既往的坑爹,好好一道水题,被搞成一道坑题!!! //注意:r(i) < l(i+1) !细节啊细节! #incl ...
- 【20171027中】alert(1) to win 第13,14,15,16题
第13题 题目: function escape(s) { var tag = document.createElement('iframe'); // For this one, you get t ...
- 【交互 细节题 思维题】cf1064E. Dwarves, Hats and Extrasensory Abilities
第一次做交互真有趣……:挺好的细节思维题 This is an interactive problem. In good old times dwarves tried to develop extr ...
- 【2019.10.7 CCF-CSP-2019模拟赛 T2】绝对值(abs)(线段树细节题)
找规律 设\(p_i=a_{i+1}-a_i\),则答案就是\(\sum_{i=1}^{n-1}p_i\). 考虑若将\(a_i\)加上\(x\)(边界情况特殊考虑),就相当于是将\(p_{i-1}\ ...
- bzoj1067——SCOI2007降雨量(线段树,细节题)
题目描述 我们常常会说这样的话:"X年是自Y年以来降雨量最多的".它的含义是X年的降雨量不超过Y年,且对于任意\(Y<Z<X\),Z年的降雨量严格小于X年.例如2002 ...
- Codeforces 571E - Geometric Progressions(数论+阿巴细节题)
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 感觉此题思维难度不太大,不过大概是细节多得到了精神污染的地步所以才放到 D1E 的罢((( 首先我们对所有 \(a_i,b_i\ ...
随机推荐
- 解决jquery-easyui1.3.3 combobox 多选模式不兼容IE8问题
扩展Array的原型对象,加入indexOf方法 if(!Array.prototype.indexOf){ Array.prototype.indexOf = function(target) ...
- Netsharp产品标识自定义设置:产品名称、版权、LOGO等
阅读本文请先阅读Netsharp下载及环境搭建 Netsharp本身是一个业务基础平台,Netsharp本身基础上开发的业务产品对客户才有价值,客户看到的产品应该不是Netsharp而是具体的业务产品 ...
- HDU 5638 拓扑排序+优先队列
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 题意: 给你一个DAG图,删除k条边,使得能个得到字典序尽可能小的拓扑排序 题解: 把拓扑排序 ...
- 如何快速查看将C反汇编的代码
查看反汇编主要的思路在于将 流程,处理,算法 区分开来.1 函数调用:原C代码: int sum(int, int);int main(){ int c = sum(1, 2); printf(&qu ...
- BZOJ2961: 共点圆
好久没发了 CDQ分治,具体做法见XHR的论文… /************************************************************** Problem: 29 ...
- C内联汇编
用C写程序比直接用汇编写程序更简洁,可读性更好,但效率可能不如汇编程序,因为C程序毕竟要经由编译器生成汇编代码,尽管现代编译器的优化已经做得很好了,但还是不如手写的汇编代码.另外,有些平台相关的指令必 ...
- ZOJ3720 Magnet Darts(点在多边形内)
第一道点在多边形内的判断题,一开始以为是凸的.其实题意很简单的啦,最后转化为判断一个点是否在一个多边形内. 如果只是简单的凸多边形的话,我们可以枚举每条边算下叉积就可以知道某个点是不是在范围内了.但对 ...
- iOS-JS交互 (WebViewJavascriptBridge)
, , , ); messageButton.titleLabel.font = font; messageButton.backgroundColor = [UIColor colo ...
- POJ 2027
#include<iostream> using namespace std; int main() { int time; cin>>time; int a; int b; ...
- 历代诗词咏宁夏注释3----蔡升元:<题大清渠>
题大清渠 蔡升元 为怜□□□□□,□□□□□□□. □□□□沙碛里,凿开峡口贺兰旁. 支分九堡通沟浍,鼎峙三渠并汉唐. 作吏尽如君任事,不难到处乐丰穰. 两渠中划大清渠,畚筑无劳民力纾.[1] 心画万 ...