SDAU课程练习--problemA(1000)

题目描述

The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure.

The floor has 200 rooms each on the north side and south side along the corridor. Recently the Company made a plan to reform its system. The reform includes moving a lot of tables between rooms. Because the corridor is narrow and all the tables are big, only one table can pass through the corridor. Some plan is needed to make the moving efficient. The manager figured out the following plan: Moving a table from a room to another room can be done within 10 minutes. When moving a table from room i to room j, the part of the corridor between the front of room i and the front of room j is used. So, during each 10 minutes, several moving between two rooms not sharing the same part of the corridor will be done simultaneously. To make it clear the manager illustrated the possible cases and impossible cases of simultaneous moving.

For each room, at most one table will be either moved in or moved out. Now, the manager seeks out a method to minimize the time to move all the tables. Your job is to write a program to solve the manager’s problem.

Input

The input consists of T test cases. The number of test cases ) (T is given in the first line of the input. Each test case begins with a line containing an integer N , 1<=N<=200 , that represents the number of tables to move. Each of the following N lines contains two positive integers s and t, representing that a table is to move from room number s to room number t (each room number appears at most once in the N lines). From the N+3-rd line, the remaining test cases are listed in the same manner as above.

Output

The output should contain the minimum time in minutes to complete the moving, one per line.

Sample Input

3 
4 
10 20 
30 40 
50 60 
70 80 
2 
1 3 
2 200 
3 
10 100 
20 80 
30 50 

Sample Output

10
20
30

题目大意

走廊两边对称分布400个房间,从a搬椅子到b房间,搬一趟的时间为十分钟.只有一条走廊因此不相容的不能同时搬运。给你一组需搬送椅子的房间数据,求最短的搬运时间。典型的贪心问题(线段不相容)。

AC代码

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<algorithm>
  4. using namespace std;
  5. bool cmp(int a,int b)
  6. {
  7. return a > b;
  8. }
  9. int main()
  10. {
  11. int room[200] = { 0 };
  12. cout.sync_with_stdio(false);
  13. //freopen("date.in", "r", stdin);
  14. //freopen("date.out", "w", stdout);
  15. int N, m,a, b;
  16. cin >> N;
  17. for (int i = 0; i < N; i++)
  18. {
  19. //memset(room, 0, 201);
  20. for (int l = 0; l < 200; l++)
  21. room[l] = 0;
  22. cin >> m;
  23. for (int j = 0; j < m; j++)
  24. {
  25. cin >> a >> b;
  26. if (a > b)
  27. swap(a, b);
  28. a = (a - 1) / 2;
  29. b = (b - 1) / 2;
  30. for (int k =a ; k <= b; k++)
  31. {
  32. room[k]++;
  33. }//79行
  34. }
  35. sort(room, room + 201, cmp);//第81行,就是他
  36. cout << room[0]* 10 << endl;
  37. }
  38. }

这道题是一道水题,可我却wrong answer了,最后检查出来是因为第81行的sort语句写在了第79行,汗。。。。如果这种问题还能用一时粗心来解释的话,就是我自己对自己不负责了。这分明是写代码是逻辑混乱,思路不清晰。应该在敲代码之前想好思路再下手,可回想起来,现在我的一般做法是没等想好,有了大概想法下手敲代码。因此很容易使逻辑混乱,写了这句忘了上句。这是不行的,之后一定得注意,不能太过心急去敲代码。





原文地址:https://www.cnblogs.com/liuzhanshan/p/5323859.html