题目链接:http://codeforces.com/problemset/problem/305/A

题目意思:给出一个序列,需要从中选择一些数,这些数需要满足:任意的两个数中每一位至少有一个数满足该位有0。例如,406, 10(可以看成010)是符合条件的; 406, 11 就不符合条件,因为个位上这两个数都不包含0。

一开始想得太过复杂:把整型的数保存到字符数组中,再用strstr函数找出是否有0的存在,但是这样做根本不能解决问题,因为不能得出0的具体位置。并且不能判断出两个数中的不同位至少有一个有0这个问题;后来甚至想到用位运算,看了下tutorial,原来又把问题想复杂了。

其实,解决的方法不难。首先看数据范围,最大是100,最小是0。这两个数肯定是要保存下来的,因为它和任何一个在区间(0, 100)中的数相加都符合每一位至少有一个数有0。接着考虑个位上的数,即(0,10),只需要保存一个,还有[10, 100)中被10整除的数,也是只需要保存一个。举个例子,比如8,30, 100, 0,两两组合都符合至少两个数中满足某一位是0的(不够位的,可以在前面添0,8可以看成008或者08)。至于[10, 100)中不能被10整除的数有一种情况也是需要只保存一个的,就是当序列中只有0或100或两个同时都有。

特别要注意一个比较容易遗忘的细节,很阴险的说~~~当序列中只有一个数的时候,无论是什么,都需要输出。隐含是满足条件的!!!卑鄙!!!

 #include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std; const int maxn = + ;
int ans[maxn]; int main()
{
int i, k, tmp, tmp1, cnt, cnt1, flag, flag1, flag2, flag3;
while (scanf("%d", &k) != EOF)
{
// freopen("in.txt", "r", stdin);
flag = flag1 = flag2 = flag3 = ;
cnt1 = cnt= ;
for (i = ; i < k; i++)
{
scanf("%d", &tmp);
if ((tmp == || tmp == ) && cnt1 <= ) // 0 or 100,cnt1不用也可以,只是为了严谨,防止序列中有多个重复的0或100
{
ans[cnt++] = tmp;
cnt1++;
flag = ;
}
else if (tmp >= && tmp < ) // [10, 100)
{
if (tmp % == && !flag1) // 10的倍数
{
ans[cnt++] = tmp;
flag1 = ;
}
else if (!flag2) // 不是10的倍数
{
tmp1 = tmp; // 暂时保留,因为有可能不需要输出
flag2 = ;
}
}
else if (tmp > && tmp < && !flag3) // (0, 10)
{
ans[cnt++] = tmp;
flag3 = ;
}
}
if (flag && !flag1 && !flag3 && k != )
{
if (flag2) // 这个条件十分关键
ans[cnt++] = tmp1;
}
if (flag2 && !flag && !flag1 && !flag3)
printf("1\n%d\n", tmp);
else
{
printf("%d\n", cnt);
for (i = ; i < cnt; i++)
printf("%d ", ans[i]);
printf("\n");
}
}
return ;
}

codeforces A. Strange Addition 解题报告的更多相关文章

  1. Codeforces Round 665 赛后解题报告(暂A-D)

    Codeforces Round 665 赛后解题报告 A. Distance and Axis 我们设 \(B\) 点 坐标为 \(x(x\leq n)\).由题意我们知道 \[\mid(n-x)- ...

  2. Codeforces Round 662 赛后解题报告(A-E2)

    Codeforces Round 662 赛后解题报告 梦幻开局到1400+的悲惨故事 A. Rainbow Dash, Fluttershy and Chess Coloring 这个题很简单,我们 ...

  3. Codeforces Round #277.5 解题报告

    又熬夜刷了cf,今天比正常多一题.比赛还没完但我知道F过不了了,一个半小时贡献给F还是没过--应该也没人Hack.写写解题报告吧= =. 解题报告例如以下: A题:选择排序直接搞,由于不要求最优交换次 ...

  4. timus 1175. Strange Sequence 解题报告

    1.题目描述: 1175. Strange Sequence Time limit: 1.0 secondMemory limit: 2 MB You have been asked to disco ...

  5. codeforces B. Simple Molecules 解题报告

    题目链接:http://codeforces.com/problemset/problem/344/B 题目意思:这句话是解题的关键: The number of bonds of an atom i ...

  6. codeforces 591A. Wizards' Duel 解题报告

    题目链接:http://codeforces.com/problemset/problem/591/A 题目意思:其实看下面这幅图就知道题意了,就是Harry 和 He-Who-Must-Not-Be ...

  7. codeforces 582A. GCD Table 解题报告

    题目链接:http://codeforces.com/problemset/problem/582/A 网上很多题解,就不说了,直接贴代码= = 官方题解: http://codeforces.com ...

  8. codeforces 581C. Developing Skills 解题报告

    题目链接:http://codeforces.com/problemset/problem/581/C 题目意思:给出 n 个数:a1, a2, ..., an (0 ≤ ai ≤ 100).给出值 ...

  9. codeforces 577B. Modulo Sum 解题报告

    题目链接:http://codeforces.com/problemset/problem/577/B 题目意思:就是给出 n 个数(a1, a2, ..., an) 和 m,问能不能从这 n 个数中 ...

随机推荐

  1. Yii2 radioList设置默认值

    可以在对应的Controller的action中设置 $model->type = 1; 在view中 <?php $form = ActiveForm::begin(); ?>   ...

  2. Oracle常用sql

    Oracle不像Sqlserver,并没有提供l默认约束,但提供了默认值,效果一样.--------------------------- 在建表时设置默认约束-------------------- ...

  3. Oracle之自定义函数

    数据库中函数包含四个部分:声明.返回值.函数体和异常处理. --没有参数的函数 create or replace function get_user return varchar2 is v_use ...

  4. Ubuntu安装VMware Tools的方法

    最后我将提供一个12版本的VMware Tools集合,包括了linux.iso. 背景: VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能(S ...

  5. [转]基于overlayfs的硬盘资源隔离工具troot

    原文在这里:http://blog.donghao.org/tag/overlayfs/ 某些开发测试团队会有这样的需求:多个开发或测试人员在一台物理机上搭环境.装rpm包.测试等,目录很可能互相干扰 ...

  6. Android模拟器端口被占用问题的解决办法

    一.问题描述 今天在Eclipse中运行Android项目时遇到"The connection to adb is down, and a severe error has occured& ...

  7. Ubuntu格式化分区时的一个小错误

    admin@gpc:/$ sudo  mkfs -t ext3 -c /dev/sdb1 mkfs.ext3: inode_size (128) * inodes_count (0) too big ...

  8. Socket网络编程(2)--服务端实现

    中秋了,首先祝大家中秋快乐,闲着无事在家整一个socket的聊天程序,有点仿QQ界面,就是瞎折腾,不知道最后是不是能将所有功能实现. 如果你对socket不了解,请看这篇文章:http://www.c ...

  9. IMAP(Internet Mail Access Protocol,Internet邮件访问协议)以前称作交互邮件访问协议(Interactive Mail Access Protocol)。

    IMAP(Internet Mail Access Protocol,Internet邮件访问协议)以前称作交互邮件访问协议(Interactive Mail Access Protocol).IMA ...

  10. C++中map的基本操作和使用;

    注:本文来自sina live 的博文 Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本 ...