Vladik and flights CodeForces - 743A

原题链接

考察:模拟,贪心

思路:

        大水题,但我WA两次....

       第一次没考虑b<a的情况,求距离是abs

       第二次没考虑多次中转的情况...一开始的思路就是只存在一个中转站,如果>1个不如直接飞去后面那个.但实际此思路错误:

       eg: 111110000 (第1个是源地址,最后一个是目标),实际上一个中转站不如1->5->6->9花费少...

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 const int N = 100010;
 5 int n,a,b;
 6 char s[N];
 7 int solve()
 8 {
 9     if(s[a]==s[b]) return 0;
10     int cost = abs(b-a);
11     if(a<b)
12     {
13         for(int i=a;i<b;i++)
14           if(s[i]==s[a]) a = i;
15         for(int i=b;i>a;i--)
16           if(s[i]==s[b]) b = i;
17         cost = min(b-a,cost);
18     }
19     else{
20         for(int i=b;i<a;i++)
21           if(s[i]==s[b]) b = i;
22         for(int i=a;i>b;i--) 
23           if(s[i]==s[a]) a = i;
24         cost = min(a-b,cost);
25     }
26     return cost;
27 }
28 int main() 
29 {
30     scanf("%d%d%d%s",&n,&a,&b,s+1);
31     int ans = solve();
32     printf("%d\n",ans);
33     return 0;
34 }

 

posted @ 2021-04-06 15:16  acmloser  阅读(53)  评论(0编辑  收藏  举报