首页 > 其他 > 详细

CodeForces 566B Replicating Processes

时间:2015-10-10 19:53:33      阅读:240      评论:0      收藏:0      [点我收藏+]

  为减轻服务器负担,将一个进程分为两个进程,每个服务器上原来有四个进程,分完后每个服务器有八个进程,分的过程中每个服务器最多有九个进程

  做法:先把每个服务器的四个小进程放到同一个数组,循环遍历所有服务器,遍历到每个服务器时就将其中一个服务器分成两个,如果不符合分解条件就先不分,分下一个,一直循环到所有服务器原来的四个小进程都分完

技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<vector>
 4 using namespace std;
 5 struct node
 6 {
 7     int b, c, i;
 8     node(int x = 0, int y = 0, int z = 0)
 9     {
10         b = x;
11         c = y;
12         i = z;
13     }
14 };
15 vector<node>a[30010];
16 int n;
17 char vis[30010];
18 int main()
19 {
20     while (scanf("%d", &n) == 1)
21     {
22         memset(vis, 4, sizeof(vis));
23         int i, tmp, tmp1, tmp2, j,num;
24         for (i = 0; i <= n; i++)
25             a[i].clear();
26         n *= 4;
27         num = n;
28         for (i = 1; i <= n; i++)
29         {
30             scanf("%d%d%d", &tmp, &tmp1, &tmp2);
31             a[tmp].push_back(node(tmp1, tmp2, i));
32         }
33         n /= 4;
34         puts("YES");
35         int work = 1;
36         while (work)
37         {
38             work = 0;
39             for (j = 1; j <= n; j++)
40             {
41                 if (!a[j].empty())
42                     for (vector<node>::iterator k = a[j].begin(); k != a[j].end(); k++)
43                     {
44                         --vis[j];
45                         ++vis[k->b];
46                         ++vis[k->c];
47                         work = 1;
48                         if (vis[k->b] < 10 && vis[k->c] < 10)
49                         {
50                             printf("%d", k->i);
51                             num--;
52                             if (num) printf(" ");
53                             a[j].erase(k);
54                             break;
55                         }
56                         else
57                         {
58                             ++vis[j];
59                             --vis[k->b];
60                             --vis[k->c];
61                         }                    
62                     }
63             }
64         }
65         puts("");
66     }
67     return 0;
68 }
View Code

 

CodeForces 566B Replicating Processes

原文:http://www.cnblogs.com/cdyboke/p/4868020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!