zoukankan      html  css  js  c++  java
  • (模拟)HDU-5641 King's Phone

    原题链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=5641


    感悟:

    这道题简直坑死了,本来写的好好的感觉没问题了,教的时候RE了,数组越界,仔细看看题目,发现输入的数字是(0到int_max),感觉很疑惑,不是应该1-9么。。
    没想到这题就是想让你判断,否决掉大于9的数。。感觉坑,所以vis数组一直越界。
    解决了上述问题之后,再交结果是TLE,超时,仔细看了一下代码发现没啥问题,结果就想到会不会是IO量太多,cin速度太慢,换成scanf之后就A了。

    我还是图样图森破~


    代码:

     1 #include<cstring>
     2 #include<cstdio>
     3 #include<cmath>
     4 using namespace std;
     5 
     6 int map[11][2]={{0,0},{1,1},{1,2},{1,3},{2,1},{2,2},{2,3},{3,1},{3,2},{3,3}};
     7 bool vis[20];
     8 
     9 bool Cando(int a,int b){
    10     if(vis[b]){
    11         return false;
    12     }
    13     else if(abs(map[b][0]-map[a][0])==2&&abs(map[b][1]-map[a][1])==2&&!vis[(a+b)/2]){
    14         return false;
    15     }
    16     //如果在对角线且隔一个并且中间那块没被用过,就不行
    17     else if(map[b][0]==map[a][0]&&abs(map[b][1]-map[a][1])==2&&!vis[(a+b)/2]){
    18         return false;
    19     }
    20     //如果在同一行且隔一个并且中间那块没被用过,就不行
    21 
    22     else if(map[b][1]==map[a][1]&&abs(map[b][0]-map[a][0])==2&&!vis[(a+b)/2]){
    23         return false;
    24     }
    25      //如果在同一列且隔一个并且中间那块没被用过,就不行
    26     vis[b]=true;
    27     return true;
    28 }
    29 
    30 int main(){
    31     int n;
    32     int in[10];
    33     scanf("%d",&n);
    34     while(n--){
    35         int len;
    36         bool flag=true;
    37         memset(vis,0,sizeof(vis));
    38         scanf("%d",&len);
    39         for(int i=0;i<len;i++){
    40             scanf("%d",&in[i]);
    41             if(in[i]<1||in[i]>9){
    42                 flag=false;
    43             }
    44         }
    45         if(len<4||!flag){
    46             printf("invalid
    ");
    47             continue;
    48         }
    49         vis[in[0]]=true;
    50         for(int i=1;i<len;i++){
    51             if(!Cando(in[i-1],in[i])){
    52                 flag=false;
    53             }
    54         }
    55         if(!flag){
    56             printf("invalid
    ");
    57         }
    58         else{
    59             printf("valid
    ");
    60         }
    61     }
    62     return 0;
    63 }
     
  • 相关阅读:
    Jsp自学2
    Jsp自学1
    .NET资源泄露与处理方案
    版本控制简介和工具
    中文操作
    获取windows操作系统所有用户
    .NET单例模式快速学习应用
    .NET多线程知识快速学习
    安装&卸载Windows服务
    扫雷小游戏-纯网页版
  • 原文地址:https://www.cnblogs.com/tak-fate/p/5765975.html
Copyright © 2011-2022 走看看