hdu4671 思维构造
pid=4671">http://acm.hdu.edu.cn/showproblem.php? pid=4671
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.
Each test case has one line containing two integer N ( 2≤N≤100) and M ( 1≤M≤100).
5 3
2 4 3 1 5
1 5 4 2 3
3 5 2 4 1HintIn 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 思维构造的更多相关文章
- 思维/构造 HDOJ 5353 Average
题目传送门 /* 思维/构造:赛后补的,当时觉得3题可以交差了,没想到这题也是可以做的.一看到这题就想到了UVA_11300(求最小交换数) 这题是简化版,只要判断行不行和行的方案就可以了,做法是枚举 ...
- Pythagorean Triples毕达哥斯拉三角(数学思维+构造)
Description Katya studies in a fifth grade. Recently her class studied right triangles and the Pytha ...
- A Mist of Florescence CodeForces - 989C(思维构造)
题意: 让你构造一个图,使得A,B,C,D的个数为给定的个数,上下左右连通的算一个. 哎呀 看看代码就懂了..emm..很好懂的 #include <bits/stdc++.h> usin ...
- 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[ ...
- 牛客多校训练第八场C.CDMA(思维+构造)
题目传送门 题意: 输入整数m( m∈2k ∣ k=1,2,⋯,10),构造一个由1和-1组成的m×m矩阵,要求对于任意两个不同的行的内积为0. 题解: Code: #include<bits/ ...
- Atcoder C - +/- Rectangle(思维+构造)
题目链接:http://agc016.contest.atcoder.jp/tasks/agc016_c 题解:挺简单的构造,很容易想到的构造方法就是(h*w)的小矩阵里其他值赋值为1,最后一个赋值为 ...
- AtCoder - 2282 (思维+构造)
题意 https://vjudge.net/problem/AtCoder-2282 告诉你sx,sy,tx,ty,问从s走到t,再从t走到s,再从s走到t,再从t回到s的最短路,每次只能上下左右选一 ...
- ACM-ICPC 2018 青岛赛区现场赛 D. Magic Multiplication && ZOJ 4061 (思维+构造)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4061 题意:定义一个长度为 n 的序列 a1,a2,..,an ...
- 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 ...
随机推荐
- Visual Studio中的/MD, /MT, /MDd, /MTd 选项
Visual Studio中/MD, /MT, /MDd, /MTd表示多线程模块是否为dll.对于这几个选项我的理解如下: /MD: 定义了_MT和_DLL,让程序用多线程和dll版本的运行库. / ...
- 关闭vscode打开新文件自动关闭预览文件功能
经常碰到这个问题,我打开文件就是有用的,每次给我自动关闭了我还得去打开. 当然这个问题可以双击文件,接触那个文件的预览状态就可以解决了.不过还有一个更懒的方法,直接修改vscode配置就好了. // ...
- 51Nod 1561 另一种括号序列
题目链接 分析: 卡常数~~~好气啊~~~这是看脸的时代啊~~~ $A$代表$($的数量,$B$代表$)$的数量... 如果$($的数量多于$)$的数量,那么最有方案显然是添加$A-B$个$)$... ...
- 理想中的SQL语句条件拼接方式 (二)
问题以及想要的效果,不重复叙述,如果需要的请先看 理想中的SQL语句条件拼接方式 . 效果 现在有2个类映射数据库的2张表,结构如下: public class User { public int U ...
- Python学习杂记_14_模块(二)_常用模块
常用模块 random 模块 import random print(random.random()) # 随机浮点数,默认取0-1,不能指定范围 print(random.randint(1, 20 ...
- redis介绍与配置
redis 是什么 我们都知道 mysql.oracle 是关系型数据库,它们的特点就是像一个 Excel 表格一样,而且都是用 SQL 语句.但是你可能看到一种东西叫NoSQL.NoSQL 泛指非关 ...
- springBoot【01】
/* 使用spring官网的 http://start.spring.io/ 来建立项目包 生成入口文件,入口文件中对类注释@SpringBootApplication,这个注释是唯一的,标明这个类是 ...
- 使用webView的时候,出现Error loading page Domain:WebKitErrorDomain Error Code:101 Description: The URL can't be shown
onShouldStartLoadWithRequest = (e) => {// Implement any custom loading logic here, don't forget t ...
- Codeforces Round #270 A. Design Tutorial: Learn from Math【数论/埃氏筛法】
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- java标识符与命名规则
标识符就是给变量.类或方法起的名字.可以用字母.下划线或美元符号开头,区分大小写,没有最大长度限制.(关键字除外) 关键字 访问控制 private protected public ...