zoukankan      html  css  js  c++  java
  • Toda 2

    A group of n friends enjoys playing popular video game Toda 2. There is a rating system describing skill level of each player, initially the rating of the i-th friend is ri.

    The friends decided to take part in the championship as a team. But they should have equal ratings to be allowed to compose a single team consisting of all n friends. So the friends are faced with the problem: how to make all their ratings equal.

    One way to change ratings is to willingly lose in some matches. Friends can form a party consisting of two to five (but not more than n) friends and play a match in the game. When the party loses, the rating of each of its members decreases by 1. A rating can't become negative, so ri = 0 doesn't change after losing.

    The friends can take part in multiple matches, each time making a party from any subset of friends (but remember about constraints on party size: from 2 to 5 members).

    The friends want to make their ratings equal but as high as possible.

    Help the friends develop a strategy of losing the matches so that all their ratings become equal and the resulting rating is maximum possible.

    Input

    The first line contains a single integer n (2 ≤ n ≤ 100) — the number of friends.

    The second line contains n non-negative integers r1, r2, ..., rn (0 ≤ ri ≤ 100), where ri is the initial rating of the i-th friend.

    Output

    In the first line, print a single integer R — the final rating of each of the friends.

    In the second line, print integer t — the number of matches the friends have to play. Each of the following t lines should contain n characters '0' or '1', where the j-th character of the i-th line is equal to:

    • '0', if friend j should not play in match i,
    • '1', if friend j should play in match i.

    Each line should contain between two and five characters '1', inclusive.

    The value t should not exceed 104, it is guaranteed that such solution exists.

    Remember that you shouldn't minimize the value t, but you should maximize R. If there are multiple solutions, print any of them.

    Examples
    Input
    Copy
    5
    4 5 1 7 4
    Output
    Copy
    1
    8
    01010
    00011
    01010
    10010
    00011
    11000
    00011
    11000
    Input
    Copy
    2
    1 2
    Output
    Copy
    0
    2
    11
    11
    Input
    Copy
    3
    1 1 1
    Output
    Copy
    1
    0

    题解:数据比较小,每次操作只用两个数。还要确定最终的状态。
     1 #pragma warning(disable:4996)
     2 #include<map>
     3 #include<queue>
     4 #include<string>
     5 #include<cstdio>
     6 #include<cstring>
     7 #include<iostream>
     8 #include<algorithm>
     9 using namespace std;
    10 
    11 typedef pair<int, int> P;
    12 
    13 const int maxn = 105;
    14 
    15 P a[maxn];
    16 int n;
    17 int G[maxn*maxn][maxn];
    18 
    19 int main()
    20 {
    21     while (scanf("%d", &n) != EOF) {
    22         memset(G, 0, sizeof(G));
    23         for (int i = 1; i <= n; i++) {
    24             int tp;
    25             scanf("%d", &tp);
    26             a[i] = P(tp, i);
    27         }
    28         int cnt = 0;
    29         while (true) {
    30             sort(a + 1, a + n + 1);
    31             if (a[n].first == a[1].first) break;
    32             cnt++;
    33             int k = 0;
    34             for (int i = 2; i <= n; i++) if (a[i].first > a[1].first) k++;
    35             if (2 <= k && k <= 5 && a[n].first - 1 == a[1].first) {      //最终的状态!!!!!
    36                 for (int i = n - k + 1; i <= n; i++) {
    37                     a[i].first--;
    38                     G[cnt][a[i].second] = 1;
    39                 }
    40                 break;
    41             }
    42             else {
    43                 if (a[n].first) a[n].first--;
    44                 if (a[n - 1].first) a[n - 1].first--;
    45                 G[cnt][a[n].second] = G[cnt][a[n - 1].second] = 1;
    46             }
    47         }
    48         printf("%d
    ", a[1].first);
    49         printf("%d
    ", cnt);
    50         for (int i = 1; i <= cnt; i++) {
    51             for (int j = 1; j <= n; j++) {
    52                 printf("%d", G[i][j]);
    53             }
    54             printf("
    ");
    55         }
    56     }
    57     return 0;
    58 }



  • 相关阅读:
    Kubernetes实战(第二版)----第1章 Kubernetes简介
    Kubernetes应用程序开发认证(CKAD)学习指南-第3章 配置
    Kubernetes应用程序开发认证(CKAD)学习指南-第2章 核心概念
    Kubernetes应用程序开发认证(CKAD)学习指南-第1章 考试详情和考试资源
    Stream Processing with Apache Flink中文版-- 第11章 接下来学什么
    Stream Processing with Apache Flink中文版-- 第10章 操作Flink和流式应用程序
    Stream Processing with Apache Flink中文版-- 第8章 与外部系统的读写交互
    Stream Processing with Apache Flink中文版-- 第7章 有状态操作符和应用程序
    Stream Processing with Apache Flink中文版-- 第6章 基于时间和窗口的操作符
    Stream Processing with Apache Flink中文版--第5章 DataStream API
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/9022282.html
Copyright © 2011-2022 走看看