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 }