zoukankan      html  css  js  c++  java
  • codechef May Challenge 2016 CHSC: Che and ig Soccer dfs处理

    Description

    All submissions for this problem are available.

    Read problems statements in Mandarin Chinese, Russian and Vietnamese as well.

    Chef is a big fan of soccer! He loves soccer so much, that he even invented soccer for his pet dogs! Here are the rules of the game:

    • There are N dogs numerated from 1 to N stay in a line, so dogs i and i + 1 are adjacent.
    • There is a ball which dogs will pass around. Initially, dog s has the ball.
    • A dog with ball can pass it to another dog. If the current pass-strength of dog is x, then it can pass the ball to either dog i - x or dog i + x (provided such dog/s exist).

    To make it even more exciting, Chef created an array A of M positive integers denoting pass strengths. In i-th pass, current pass-strength of the dog making the pass will be given by Ai.
    Chef asks dogs to execute these M passes one by one. As stated before, dog s will make the first pass, then some other dog and so on till M passes.

    Dogs quickly found out that there can be lot of possible sequences of passes which will end up with a dog having the ball. Now each dog asks your help in finding number of different pass sequences which result in this dog ending up ball. Two pass sequences are considered different if after some number of passes they lead the ball to different dogs. As the answer could be quite large, output it modulo 109 + 7 (1000000007).

    Input

    • The first line of the input contains an integer T denoting the number of test cases. The description of T test cases follows.
    • The first line of each test case contains three space separated integers N, M, s denoting the number of dogs, number of pass strengths and number of dog having a ball at the beginning.
    • The second line contains M space-separated integers A1, A2, ..., AM denoting the pass strengths.

    Output

    • For each test case, output a single line containing N space-separated integers, where i-th integer should be equal to number of different valid pass sequences leading the ball to i-th dog modulo 109 + 7.

    Constraints

    • 1T10
    • 1N, M10^3
    • 1sN
    • 1Ai10^3

    Subtasks

    • Subtask #1 (30 points) : N, M10
    • Subtask #2 (70 points) : Original constraints

    Example

    Input:
    3
    3 2 2
    1 2 
    3 3 3
    1 1 1
    3 1 1
    3
    
    Output:
    1 0 1
    0 2 0
    0 0 0
    

    Explanation

    Example case 1.
    Possible sequence for dog 1 is 2->3->1.
    Possible sequence for dog 3 is 2->1->3.

    Example case 2.
    Possible sequences for dog 2 are 3->2->1->2 and 3->2->3->2.

    Example case 3.
    There are no valid sequences for such input.

    Hint

    Source Limit: 50000
    Languages: ADA, ASM, BASH, BF, C, C99 strict, CAML, CLOJ, CLPS, CPP 4.3.2, CPP 4.9.2, CPP14, CS2, D, ERL, FORT, FS, GO, HASK, ICK, ICON, JAVA, JS, LISP clisp, LISP sbcl, LUA, NEM, NICE, NODEJS, PAS fpc, PAS gpc, PERL, PERL6, PHP, PIKE, PRLG, PYPY, PYTH, PYTH 3.1.2, RUBY, SCALA, SCM chicken, SCM guile, SCM qobi, ST, TCL, TEXT, WSPC
     
    题意:中文题面   https://s3.amazonaws.com/codechef_shared/download/translated/MAY16/mandarin/CHEFSOC2.pdf
    题解: 一个变形的数塔问题 简单dfs处理.
     
     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<set>
     5 #define ll  long long
     6 using namespace std;
     7 int t;
     8 int n,m,s;
     9 int mov[1005];
    10 int ans[1005];
    11 void dfs(int pos ,int step)
    12 {
    13     if(step==m+1)
    14         {
    15             ans[pos]++;
    16             return ;
    17         }
    18     if((pos+mov[step])<=n)
    19     {
    20         dfs(pos+mov[step],step+1);
    21     }
    22     if((pos-mov[step])>=1)
    23         dfs(pos-mov[step],step+1);
    24 }
    25 int main()
    26 {
    27     while(scanf("%d",&t)!=EOF)
    28     {
    29         for(int i=1;i<=t;i++)
    30     {
    31         memset(ans,0,sizeof(ans));
    32         memset(mov,0,sizeof(mov));
    33         scanf("%d %d %d",&n,&m,&s);
    34         for(int j=1;j<=m;j++)
    35          scanf("%d",&mov[j]);
    36          dfs(s,1);
    37         cout<<ans[1];
    38         for(int k=2;k<=n;k++)
    39             cout<<" "<<ans[k];
    40         cout<<endl;
    41     }
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    Springmvc构造RESTful详细讲解
    Http和Socket连接区别
    整合struts2+hibernate详细配置步骤及注意事项
    spring,hibernate,struts的面试笔试题
    泛型中? super T和? extends T的区别
    Java中有关Null的9件事
    Eclipse中的快捷键总结
    Hibernate之Query接口的uniqueResult()方法
    Hibernate插入、查询、删除操作 HQL
    JQuery中$.ajax()方法参数详解 转载
  • 原文地址:https://www.cnblogs.com/hsd-/p/5667358.html
Copyright © 2011-2022 走看看