博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Toda 2
阅读量:4931 次
发布时间:2019-06-11

本文共 3498 字,大约阅读时间需要 11 分钟。

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 3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 using namespace std;10 11 typedef pair
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\n", a[1].first);49 printf("%d\n", 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("\n");55 }56 }57 return 0;58 }

 

 

转载于:https://www.cnblogs.com/zgglj-com/p/9022282.html

你可能感兴趣的文章
IE浏览器兼容性设置的一些问题
查看>>
SQL Server复制入门(二)----复制的几种模式
查看>>
javascript 简单认识
查看>>
tomcat 系统架构与设计模式 第二部分 设计模式 转
查看>>
scanf中的%[^\n]%*c格式
查看>>
启动Eclipse报Initializing Java Tooling错误解决方法
查看>>
用jquery来实现类似“网易新闻”横向标题滑动的移动端页面
查看>>
(原)基于物品的协同过滤ItemCF的mapreduce实现
查看>>
CSS可以和不可以继承的属性
查看>>
eclipse每次当我按ctrl+鼠标点击代码,自动关闭,产生原因及解决办法!!
查看>>
hbase
查看>>
用PHP将Unicode 转化为UTF-8
查看>>
HDOJ1002 A+B Problem II
查看>>
ADB server didn't ACK(adb不能开启
查看>>
网页内容抓取
查看>>
分布式和集群的区别
查看>>
Python基础(三)
查看>>
Sql server在cmd下的使用
查看>>
【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)
查看>>
swing
查看>>