时间相对来说还是比较合适的,正好放假就可以打一打啦。

  A. New Building for SIS:http://codeforces.com/contest/1020/problem/A

  题意概述:有n座楼,每座楼有h层。上一层楼和下一层楼各需要一分钟,在a,b两层之间有跨楼的通道,每次可以走到相邻的楼,时间也是一分钟,给出k组询问,求每组点对之间的最小时间。

  打CF学英语。一开始看起来像是最短路,但是画画图就发现并没有那么复杂,首先两栋楼之间的那一段是无论如何都要走的,关键是a,b的限制,其实也很简单,如果楼层高的那个比a低,或者楼层低的那个比b高,就先都走到a层或b层,其他时间直接用大的减去小的就可以。还要注意一点就是如果两个点本来就在同一栋楼上就不用考虑a,b的限制可以直接走。因为这个浪费了两次提交次数...

  
 1 # include <cstdio>
 2 # include <iostream>
 3 
 4 using namespace std;
 5 
 6 int n,h,a,b,k;
 7 int ta,fa,tb,fb;
 8 int ans;
 9 
10 int main()
11 {
12     scanf("%d%d%d%d%d",&n,&h,&a,&b,&k);
13     if(a>b) swap(a,b);
14     for (int i=1;i<=k;++i)
15     {
16         scanf("%d%d%d%d",&ta,&fa,&tb,&fb);
17         ans=max(ta,tb)-min(ta,tb);
18         if(fa>fb) swap(fa,fb);
19         
20         if(ta!=tb)    
21         {
22             if(fb<a) ans+=a-fa+a-fb;
23             else if(fa>b) ans+=fa-b+fb-b;
24             else ans+=fb-fa;
25         }
26         else ans+=fb-fa;
27         printf("%d\n",ans);
28     }
29     return 0;
30 }
A-New Building for SIS

相关文章: