nyoj543遥控器

来源:互联网 发布:mysql和nosql 编辑:程序博客网 时间:2024/04/27 17:01

NYOJ543



     这题给跪了 。。。。。。。。。。


      来几个测试数据:

      1.测试你的 上下键问题

         0 0 0 1

         0 0 0 0

         0 0 0

         0 0

         99 0

         答案为 1

 

        0 0 0 0

        0 0 0 1

        0 0 0

        0 0

        0  99

        答案为 1

        2 . 测试你跳键

        1 1 1 0

        1 1 1 0

        1 1 1

        1 1

         8 99  和 99 8

         答案为 3  和  1

        3.来个混合

         1  0 1 0

          0 0 0 1

          0 0 0

          1 0

          96 0   和 99 32

          答案为2  和  4


枚举+打表

难在情况理清楚


注意一个细节,就是跳到 0-9 不需要leap 键!!!!!!

#include<stdio.h>#include<string.h>#define min(a,b) a<b?a:b#define INF 1000int num[10];int leap ,up, down;int x,y;int charge[100];void read( ){        scanf("%d %d %d %d",&num[1],&num[2],&num[3],&up);scanf("%d %d %d %d",&num[4],&num[5],&num[6],&down);scanf("%d %d %d",&num[7],&num[8],&num[9]);scanf("%d %d",&leap,&num[0]);scanf("%d %d",&x,&y);}int get_up( int l , int r ){if( l < r)return r - l;return 100 -l + r;}int get_down(int l,int r){if(l < r )return 100 - r + l;return  l - r ;}int main(){int n;int i,j;int ans ;scanf("%d",&n);    while(n--){read();        memset(charge,0,sizeof(charge));ans =INF;if(x==y){printf("0\n");continue;}if(y<10){if(num[y])ans = 1;}if(leap){for(i = 0;i<=9;i++)if(num[i]){for(j = 0;j<=9;j++)if(num[j])charge[i*10+j] = 1;}           if(charge[y] )           ans = min( ans ,3);}if(up){ans=min( ans,get_up(x,y));         for( i =0;i<100;i++)    if(charge[i] && i>=10 ){ans = min( ans ,get_up(i,y)+3);}else if(i<=9 && num[i] ){  ans = min( ans ,get_up(i,y)+1);}}if(down){ans = min(ans,get_down(x,y));     for( i =0;i<100;i++)if(charge[i] && i>=10) {  ans = min( ans ,get_down(i,y)+3);}else if(i<=9 &&num[i]){ ans = min( ans ,get_down(i,y)+1);}}if(ans == INF )ans = -1;printf("%d\n",ans);}return 0;}

    

0 0
原创粉丝点击