HDU 4671——模拟题
来源:互联网 发布:linux文件编码转换 编辑:程序博客网 时间:2024/06/05 00:18
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4671
题目意思:
给定n个服务器,m个数据库。
在访问数据库的时候需要服务器的工作,并且每个服务器对数据库的访问是有优先级的。
现在就需要你给出每个数据库的服务器的优先级,使得所有的服务器尽可能保持平衡。
平衡的定义:每台服务器的工作次数之差不大于1。
有可能会有一台服务器坏掉。
解题思路:
这个题目错了很多次,只能说明自己很水。
很明显,因为只可能坏掉一台服务器,所以我们只需要考虑前两列的情况。
第1列的做法很简单,就是平均进行排序就好了。
第2列作为第1列的替补,应该遵循这样的一个规则:
相同数字的替补应该也是按照顺序平均排列的。
举例第1列数字1的替补,应该是:n,n-1,n-2、、、2
这样才能保证在第1台服务器坏了的情况下,剩下的服务器是平衡工作的。
源代码:
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<set>#include<map>#include<vector>#include<algorithm>#include<iostream>#define INF 0x3f3f3f3fusing namespace std;typedef long long LL;const double eps=1e-8;int ti[301];int main(){freopen("in.txt","r",stdin);int n,m,i,j,fir,sec,re,re1;while(scanf("%d%d",&n,&m)==2){ for(i=0;i<n-1;i++) //保存第2列的数字 ti[i]=n-1; ti[n-1]=n-2; for(i=0;i<m;i++) //枚举行 { fir=i%n; sec=ti[fir]; ti[fir]--; if(ti[fir]==fir) //好像这3个if都是不可以少的 ti[fir]--; if(ti[fir]==-1) ti[fir]=n-1; if(ti[fir]==fir) ti[fir]--; printf("%d %d",fir+1,sec+1); for(j=0;j<n;j++) { if(j!=fir && j!=sec) printf(" %d",j+1); } printf("\n"); }}return 0;}
- HDU 4671——模拟题
- hdu(5402)——Travelling Salesman Problem(模拟题)
- hdu题3413—基础算法(模拟题)
- 模拟斗地主——HDU 4930
- HDU 5867 Water problem——模拟
- HDU 5857 Median——模拟
- hdu 5131(2014 广州—模拟)
- hdu 3269 模拟题
- HDU 4770 模拟题
- HDU 4772 模拟题
- hdu 1049 模拟题
- HDU 4930 模拟题
- hdu-1103 模拟题。
- hdu 4770 模拟题
- hdu 4801模拟题
- hdu 4801模拟题
- HDU 2158 模拟题
- hdu 4561 模拟题
- C#多线程学习(六) 互斥对象
- Unity3D学习笔记02:GUI主角跟随鼠标运动
- Android RadioGroup和RadioButton案例及详解
- CFI --- Common Flash Interface
- 字符串循环移位(重复输入 两级)
- HDU 4671——模拟题
- 黑马程序员Java笔记——编程基础
- 滚动视图窗口(CScrollView)使用双缓冲问题
- Android Franmengs
- 单元测试
- poj2195 Going Home,最小费用最大流
- 编程珠玑 第二章 习题 2 给定一个包含4300000000个32位证书的顺序文件,求出一个至少包含两次的整数
- 示波器CAN波特率
- 双向循环链表的基本操作