pid=4671">http://acm.hdu.edu.cn/showproblem.php?

pid=4671

Problem Description
Makomuno has N servers and M databases. All databases are synchronized among all servers and each database has a ordered list denotes the priority of servers to access. This list is guaranteed to be a valid permutation of all servers.

Every time someone wants to execute queries on a certain database, he will send a request to the first server in the list. If it's dead, he will simply turn to the next one. Otherwise a working copy of the database is found, and this copy is called active.

Now, given N and M, Makomuno wants to find a permutation for each database which could assure that all servers are load-balanced. Moreover, Makomuno hopes the system will be load-balanced even if exactly one server is broken.

Note that if we call the number of active copies on i-th server Ai, then load-balanced means max∣Ai - Aj∣≤1 for any i and j in non broken servers set. We won't consider broken servers in this case.
 
Input
The input contains several test cases, terminated by EOF.

Each test case has one line containing two integer N ( 2≤N≤100) and M ( 1≤M≤100).
 
Output
For each case output M lines, the i-th line contains a permutation of all servers, indicating the expected order. Servers are numbered from 1 to n.
 
Sample Input
5 3
 
Sample Output
2 4 3 1 5
1 5 4 2 3
3 5 2 4 1
Hint
In the sample test case, the active copies of these databases are on server 2,1 and 3 in normal state. A = {1,1,1,0,0}
If server 1 or 3 has broken, server 5 will take its work. In case we lost server 2, the second database will use server 4 instead. A = {1,BROKEN,1,1,0}
It's clear that in any case this system is load-balanced according to the plan in sample output.

/**
hdu4671 思维构造
题目大意:有n台server和m个数据库,我们要用server执行数据库。对于每一个数据库被执行server的优先级为1~n的一个排列,每一个数据库仅仅执行一次,
问如何定义m个数据库的优先级,如果有一台server坏了的情况下仍然满足每台server的执行数据库的数量差不能大于1
解题思路:这个题是一个考验思维的题,当然答案有非常多。我仅仅要确定每一个数据库优先级最高和次高的就能够了,我们分两种情况来讨论:
1.n>=m 在这样的情况下1~m第一优先级的为1~m,第二优先级的为余下的随意(若n==m,则全部随意。要保证第一第二不能是一个数)
2.n<m 在这样的情况下1~m为1~n,再1~n,知道循环够m。第二优先级。我们对于第一优先级一样的放在一块考虑,从n~1循环(和第一反复就跳过)。 为什么这样呢?由于如果i坏了。那么第二优先级添加的还是各一个,仍保证是对的。注意要n~1循环,由于第m不一定是n的倍数。所以有i~n
可能会在第一优先级里少排一个,我们在第二优先级里要优先考虑,否则会出现有一个坏了的话差大于1的情况
*/
#include <string.h>
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,a[105][2],flag[105];
int main()
{
while(~scanf("%d%d",&n,&m))
{
if(n>=m)
{
for(int i=1;i<=m;i++)
{
a[i][0]=i;
if(a[i][0]==n)
a[i][1]=1;
else
a[i][1]=n;
}
}
else
{
for(int i=1;i<=m;i++)
{
a[i][0]=(i%n==0)?n:i%n;
}
for(int i=1;i<=n;i++)
{
int k=n;
for(int j=1;j<=m;j++)
{
if(a[j][0]==i)
{
k=(k%n==0)?n:k%n;
if(k==i)k--;
k=(k%n==0)?n:k%n;
a[j][1]=k--;
// printf("? ? %d:%d\n",a[j][0],a[j][1]);
}
}
}
}
for(int i=1;i<=m;i++)
{
//printf(">>%d %d\n",a[i][0],a[i][1]);
}
for(int i=1;i<=m;i++)
{
memset(flag,0,sizeof(flag));
printf("%d %d",a[i][0],a[i][1]);
flag[a[i][0]]=flag[a[i][1]]=1;
for(int j=1;j<=n;j++)
{
while(flag[j])j++;
if(j>n)break;
printf(" %d",j);
flag[j]=1;
}
printf("\n");
}
}
return 0;
}
/**
3 14
answer:
1 3 2
2 3 1
3 2 1
1 2 3
2 1 3
3 1 2
1 3 2
2 3 1
3 2 1
1 2 3
2 1 3
3 1 2
1 3 2
2 3 1
*/

hdu4671 思维构造的更多相关文章

  1. 思维/构造 HDOJ 5353 Average

    题目传送门 /* 思维/构造:赛后补的,当时觉得3题可以交差了,没想到这题也是可以做的.一看到这题就想到了UVA_11300(求最小交换数) 这题是简化版,只要判断行不行和行的方案就可以了,做法是枚举 ...

  2. Pythagorean Triples毕达哥斯拉三角(数学思维+构造)

    Description Katya studies in a fifth grade. Recently her class studied right triangles and the Pytha ...

  3. A Mist of Florescence CodeForces - 989C(思维构造)

    题意: 让你构造一个图,使得A,B,C,D的个数为给定的个数,上下左右连通的算一个. 哎呀 看看代码就懂了..emm..很好懂的 #include <bits/stdc++.h> usin ...

  4. Educational Codeforces Round 53C(二分,思维|构造)

    #include<bits/stdc++.h>using namespace std;const int N=1e6+6;int x[N],y[N];int sx,sy,n;char s[ ...

  5. 牛客多校训练第八场C.CDMA(思维+构造)

    题目传送门 题意: 输入整数m( m∈2k ∣ k=1,2,⋯,10),构造一个由1和-1组成的m×m矩阵,要求对于任意两个不同的行的内积为0. 题解: Code: #include<bits/ ...

  6. Atcoder C - +/- Rectangle(思维+构造)

    题目链接:http://agc016.contest.atcoder.jp/tasks/agc016_c 题解:挺简单的构造,很容易想到的构造方法就是(h*w)的小矩阵里其他值赋值为1,最后一个赋值为 ...

  7. AtCoder - 2282 (思维+构造)

    题意 https://vjudge.net/problem/AtCoder-2282 告诉你sx,sy,tx,ty,问从s走到t,再从t走到s,再从s走到t,再从t回到s的最短路,每次只能上下左右选一 ...

  8. ACM-ICPC 2018 青岛赛区现场赛 D. Magic Multiplication && ZOJ 4061 (思维+构造)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4061 题意:定义一个长度为 n 的序列 a1,a2,..,an ...

  9. Vasya And The Matrix CodeForces - 1016D (思维+构造)

    Now Vasya is taking an exam in mathematics. In order to get a good mark, Vasya needs to guess the ma ...

随机推荐

  1. 点击图片改变背景的demo-学习第二天

    实例代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  2. zepto方法

    1.$.inArray $.inArray v1.0+ $.inArray(element, array, [fromIndex]) ⇒ number 搜索数组中指定值并返回它的索引(如果没有找到则返 ...

  3. KMP字符串匹配算法翔解❤

    看了Angel_Kitty学姐的博客,我豁然开朗,写下此文: 那么首先我们知道,kmp算法是一种字符串匹配算法,那么我们来看一个例子. 比方说,现在我有两段像这样子的字符串: 分别是T和P,很明显,P ...

  4. struts2中的文件上传和文件下载

    单文件文件上传 1.

  5. Hibernate中映射一对一关联(按主键映射和外键映射)和组件映射

                                                        Hibernate中映射一对一关联(按主键映射和外键映射)和组件映射 Hibernate提供了两 ...

  6. js querySelector与getElementById

    querySelector不能取到id以数字开头的元素,据说是遵循css规范.而document.getElementById是可以的.

  7. 结构型设计模式之享元模式(Flyweight)

    结构 意图 运用共享技术有效地支持大量细粒度的对象. 适用性 一个应用程序使用了大量的对象. 完全由于使用大量的对象,造成很大的存储开销. 对象的大多数状态都可变为外部状态. 如果删除对象的外部状态, ...

  8. 一篇不错的v4l2入门文档【转】

    转自:http://blog.chinaunix.net/uid-26851094-id-3270803.html 原帖地址: http://www.isongzi.com/2009/02/23/v4 ...

  9. jQuery的动画方法

    /* animate参数: 参数一:要改变的样式属性值,写成字典的形式 参数二:动画持续的时间,单位为毫秒,一般不写单位 参数三:动画曲线,默认为‘swing’,缓冲运动,还可以设置为‘linear’ ...

  10. python tips;matplotlib 显示中文

    import numpy as npimport matplotlib.pyplot as pltimport matplotlib as mpl mpl.rcParams['axes.unicode ...