zoukankan      html  css  js  c++  java
  • UVALive

    Problem UVALive - 4255-Guess

    Time Limit: 3000 mSec

    Problem Description

    Input

    The input consists of T test cases. The number of test cases T is given in the first line of the input. Each test case consists of two lines. The first line contains an integer n (1 ≤ n ≤ 10), where n is the length of a sequence of integers. The second line contains a string of n(n + 1)/2 characters such that the first n characters correspond to the first row of the sign matrix, the next n−1 characters to the second row, ..., and the last character to the n-th row.

    Output

    For each test case, output exactly one line containing a sequence of n integers which generates the sign matrix. If more than one sequence generates the sign matrix, you may output any one of them. Every integer in the sequence must be between −10 and 10, both inclusive.
     

    Sample Input

    3 4 -+0++++--+ 2 +++ 5 ++0+-+-+--+-+-

    Sample Output

    -2 5 -3 1

    3 4

    1 2 -3 4 -5

    题解:这个题联想到拓扑排序不容易(做题太少),不过有了这个大方向之后就很好办了,关于赋值的问题,给最开始入度为0的点随便赋个值,之后每一层的点的是上一层的值减一,最后把sum[0]要化为0, 因此每个数都减去sum[0]即可。

      1 #include <bits/stdc++.h>
      2 
      3 using namespace std;
      4 
      5 #define REP(i, n) for (int i = 1; i <= (n); i++)
      6 #define sqr(x) ((x) * (x))
      7 
      8 const int maxn = 50 + 10;
      9 const int maxm = 30 + 10;
     10 const int maxs = 10000 + 10;
     11 
     12 typedef long long LL;
     13 typedef pair<int, int> pii;
     14 typedef pair<double, double> pdd;
     15 
     16 const LL unit = 1LL;
     17 const int INF = 0x3f3f3f3f;
     18 const LL mod = 1000000007;
     19 const double eps = 1e-14;
     20 const double inf = 1e15;
     21 const double pi = acos(-1.0);
     22 
     23 int n, deg[maxn];
     24 vector<int> G[maxn];
     25 int ans[maxn];
     26 
     27 void toposort()
     28 {
     29     queue<int> que;
     30     for (int i = 0; i <= n; i++)
     31     {
     32         if (!deg[i])
     33         {
     34             que.push(i);
     35             ans[i] = 10;
     36         }
     37     }
     38 
     39     while (!que.empty())
     40     {
     41         int head = que.front();
     42         que.pop();
     43         for (auto v : G[head])
     44         {
     45             deg[v]--;
     46             if (!deg[v])
     47             {
     48                 que.push(v);
     49                 ans[v] = ans[head] - 1;
     50             }
     51         }
     52     }
     53 }
     54 
     55 int main()
     56 {
     57     ios::sync_with_stdio(false);
     58     cin.tie(0);
     59     freopen("input.txt", "r", stdin);
     60     //freopen("output.txt", "w", stdout);
     61     int T;
     62     cin >> T;
     63     while (T--)
     64     {
     65         cin >> n;
     66         for (int i = 0; i <= n; i++)
     67         {
     68             G[i].clear();
     69             deg[i] = ans[i] = 0;
     70         }
     71         string str;
     72         cin >> str;
     73         int pos = 0;
     74         for (int i = 1; i <= n; i++)
     75         {
     76             for (int j = i; j <= n; j++)
     77             {
     78                 if (str[pos] == '+')
     79                 {
     80                     G[j].push_back(i - 1);
     81                     deg[i - 1]++;
     82                 }
     83                 else if (str[pos] == '-')
     84                 {
     85                     G[i - 1].push_back(j);
     86                     deg[j]++;
     87                 }
     88                 pos++;
     89             }
     90         }
     91         toposort();
     92         for (int i = 1; i <= n; i++)
     93         {
     94             ans[i] -= ans[0];
     95         }
     96         ans[0] = 0;
     97         for (int i = 1; i <= n; i++)
     98         {
     99             cout << ans[i] - ans[i - 1];
    100             if (i != n)
    101             {
    102                 cout << " ";
    103             }
    104             else
    105             {
    106                 cout << endl;
    107             }
    108         }
    109     }
    110     return 0;
    111 }
  • 相关阅读:
    Java IO编程中的几个概念
    java强转与继承关系的加深理解:object[]的数组无法强转为String[]的数组
    java反射机制获取对象中父类属性对象
    intealij idea中报错:Error during artifact deployment. See server log for details
    自定义数据属性
    字符集属性
    HTMLDocument的变化
    动态添加对象子对象,防止命名冲突
    焦点管理
    HTML5与相关类的扩充
  • 原文地址:https://www.cnblogs.com/npugen/p/10746395.html
Copyright © 2011-2022 走看看