您的位置:首页 > 其它

Codeforces Round #184 (Div. 2)

2015-09-21 21:13 459 查看

A. Strange Addition

题目链接:http://codeforces.com/problemset/problem/305/A
题目意思:给出一个序列,需要从中选择一些数,这些数需要满足:任意两个数,这两个数的每一对应位上(即个位对个位,十位对十位 ......),至少存在一个 0。求最多选出多少个数? 数据范围是(0 ~ 100)

思路: 由数据范围 最多的个数是4 个,对于特殊的 100和0 与任何数成对都满足条件,所以只要存在就要选上。为满足最多,因为x0 可以与 x 同时存在,但不可以与xy(y!= 0)同时存在, 接下来 选择x0型的和x型的,如果存在就选上。接下来就是要判断是否选上xy(y!= 0)型的。因为不知道xy型出现的位置,可以用一个变量z记录最后出现的xy型的数。按顺序判断完后,在判断是否有x0型的或x型的存在。如果不存在,就将z选上。

#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
typedef long long ll;

int main()
{
ll p , q , a;
int n , flag = 0;
cin>>p>>q>>n;
//    cout<<p<<q<<endl;
for(int i = 0;i < n;i ++)
{
cin>>a;
if(q <= 0 || a > ( p/q ))//当q 为0要跳出循环
{
flag = 1;
break;
}
p = p - a * q;    //  乘p 模拟
//    cout<<p<<endl;
swap(p,q);
}
if(flag != 1)
{
if(q == 0)
printf("YES\n");
else
printf("NO\n");
}
else
printf("NO\n");
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: