CoderForces 689A Mike and Cellphone (水题)

题意:给定一个手机键盘数字九宫格,然后让你判断某种操作是不是唯一的,也就是说是不是可以通过平移也能实现。

析:我的想法是那就平移一下,看看能实现,就四种平移,上,下,左,右,上是-3,要注意0变成8,如果有数字变成小于等于0了,那么就是不可以,同理,下是+3,8可以变成0,其他的也是这样,

注意左右平移是147,和369,是不能平移,然后就AC了。再简化一下就是如果有123,就不能上移,如果有79就不能下移,如果有147就不能左移,如果有369就不能右移,如果有0就不能下左右移。

代码如下:

#include <iostream>
#include <cstdio>

using namespace std;
const int maxn = 9 + 5;
int a[maxn];
int b[maxn];
char s[maxn];

int main(){
    int n;
    while(scanf("%d", &n) == 1 && n){
        scanf("%s", s);
        for(int i = 0; i < n; ++i)  a[i] = s[i] - ‘0‘;
        bool ok = false;
        for(int i = 0; i < n; ++i)//下
            if(a[i] && a[i] != 8)  b[i] = a[i] + 3;
            else if(a[i] == 8)  b[i] = 0;
            else b[i] = 10;
        int i;
        for(i = 0; i < n; ++i)  if(b[i] > 9)  break;
        if(i == n)  ok = true;
        for(i = 0; i < n; ++i)//上
            if(a[i])  b[i] = a[i] - 3;
            else b[i] = 8;
        for(i = 0; i < n; ++i)  if(b[i] <= 0)  break;
        if(i == n)  ok = true;
        for(i = 0; i < n; ++i)//右
            if(3 == a[i] || 6 == a[i] || 9 == a[i])  b[i] = 10;
            else if(a[i])  b[i] = a[i] + 1;
            else b[i] = 10;
        for(i = 0; i < n; ++i)  if(b[i] > 9)  break;
        if(i == n)  ok = true;
        for(i = 0; i < n; ++i)//左
            if(a[i] == 1 || a[i] == 4 || a[i] == 7)  b[i] = -10;
            else if(a[i])  b[i] = a[i] - 1;
            else b[i] = -10;
        for(i = 0; i < n; ++i)  if(b[i] <= 0)  break;
        if(i == n)  ok = true;
        if(!ok)  puts("YES");
        else  puts("NO");
    }
    return 0;
}

第二种:

#include <iostream>
#include <cstdio>

using namespace std;
const int maxn = 9 + 5;
int a[maxn];
int b[maxn];
char s[maxn];

int main(){
    int n;
    while(scanf("%d", &n) == 1 && n){
        scanf("%s", s);
        int l = 0, u = 0, r = 0, d = 0;
        for(int i = 0; i < n; ++i){
            if(s[i] == ‘0‘)  l = r = d = 1;
            if(s[i] == ‘1‘ || s[i] == ‘4‘ || s[i] == ‘7‘) l = 1;
            if(s[i] == ‘3‘ || s[i] == ‘6‘ || s[i] == ‘9‘) r = 1;
            if(s[i] == ‘1‘ || s[i] == ‘2‘ || s[i] == ‘3‘) u = 1;
            if(s[i] == ‘7‘ || s[i] == ‘9‘) d = 1;
        }
        if(u && d && l && r)  puts("YES");
        else  puts("NO");
    }
    return 0;
}
时间: 2024-10-13 02:18:38

CoderForces 689A Mike and Cellphone (水题)的相关文章

CodeForces 689A -Mike and Cellphone

题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=412142 题目大意: 给定一个0-9数字键盘,随后输入一个操作序列,即按键手势,问该操作序列在键盘上形成的手势是否是唯一的,是YES,否NO.手势可往上下左右平移. 解题思路: 由于数字很少,可以把数字的位置表示成坐标,按这个手势的顺序匹配其它的数字(即把这些数字统一上或下或左或右平移),看匹配后的数字还在不在这个键盘上; #include <cstdio>

5.1个人赛解题报告(区间dp,按位与或,图论等水题)

这次5.1打了一场个人赛,已经连赛了三周了,有点疲惫感觉,可能自己太水了,每次都有点小紧张. 这次只解出来三道题,然而有一道按位与按位或的水题不知道思路实在是做题太少,还有就是第一题区间DP,也消耗了不少的时间,但是没有成功的写出来,还是不够熟练啊. 下面写报告 A. System Administrator time limit per test 2 seconds memory limit per test 256 megabytes input standard input output

2015南阳CCPC L - Huatuo&#39;s Medicine 水题

L - Huatuo's Medicine Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Huatuo was a famous doctor. He use identical bottles to carry the medicine. There are different types of medicine. Huatuo put medicines into the bottles and chain these b

sdut 2841 Bit Problem (水题)

题目 贴这个题是因为看题解有更简单的方法, 我做的时候是直接算的, 也很简单. 贴一下题解吧: 如果一个整数不等于 0,那么该整数的二进制表示中至少有一位是 1. 这个题结果可以直接输出 x - (x&(x-1)); 因为x-1 之后二进制下,就是最右边的1变成了0, 最右边的1的 右边所有的0变成了1, 不影响最左边. 我的代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4

sdut 2413:n a^o7 !(第三届山东省省赛原题,水题,字符串处理)

n a^o7 ! Time Limit: 1000MS Memory limit: 65536K 题目描述 All brave and intelligent fighters, next you will step into a distinctive battleground which is full of sweet and happiness. If you want to win the battle, you must do warm-up according to my inst

杭电(hdu)2053 Switch Game 水题

Switch Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13113    Accepted Submission(s): 7970 Problem Description There are many lamps in a line. All of them are off at first. A series of o

4.7-4.9补题+水题+高维前缀和

题目链接:51nod 1718 Cos的多项式  [数学] 题解: 2cosx=2cosx 2cos2x=(2cosx)^2-2 2cos3x=(2cosx)^3-3*(2cosx) 数归证明2cos(nx)能表示成关于2cosx的多项式,设为f(n) f(1)=x,f(2)=x^2-2(其中的x就是2cosx) 假设n=1~k时均成立(k>=3) 当n=k+1时 由cos((k+1)x)=cos(kx)cos(x)-sin(kx)sin(x) cos((k-1)x)=cos(kx)cos(x)

历年NOIP水题泛做

快noip了就乱做一下历年的noip题目咯.. noip2014 飞扬的小鸟 其实这道题并不是很难,但是就有点难搞 听说男神错了一个小时.. 就是$f_{i,j}$表示在第$i$个位置高度为$j$的时候最小点击次数 递推的话对于上升的情况只做一次,后面几次在后面再做.. #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace st

[ZPG TEST 114] 阿狸的英文名【水题】

1.      阿狸的英文名 阿狸最近想起一个英文名,于是他在网上查了很多个名字.他发现一些名字可以由两个不同的名字各取一部分得来,例如John(约翰)的前缀 "John"和Robinson(鲁滨逊)的后缀 "son" 连在一起就是Johnson. 现在他找到了两个喜欢的名字(名字可看作字符串),用A和B表示,他想知道取A的一个非空前缀和B的一个非空后缀,连接在一起能组成多少不同的字符串. 输入格式 输入两行,分别表示字符串A和B:字符串只包含小写英文字母. 输出格