https://vjudge.net/problem/UVA-10881
及其有意思的一道题
一开始我也不会
看了题解才会的
因为每只蚂蚁价值等价
所以在碰撞的时候等效为路过
那么这题就太简单了
牛逼的思维题
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int M=1e4+5;
struct Ant{
int id,p,d;
bool operator<(const Ant& a) const{
return p<a.p;
}
}before[M],after[M];
const char dirName[][10]={"L","Turning","R"};
int order[M];
int main(){
int k;
cin>>k;
for(int kase=1;kase<=k;++kase){
int L,T,n;
cin>>L>>T>>n;
cout<<"Case #"<<kase<<":"<<endl;
for(int i=0;i<n;++i){
int p,d;
char c;
cin>>p>>c;
d=(c=='L'?-1:1);
before[i]=(Ant){i,p,d};
after[i]=(Ant){0,p+T*d,d};
}
sort(before,before+n);
for(int i=0;i<n;++i)
order[before[i].id]=i;
sort(after,after+n);
for(int i=0;i<n-1;++i){
if(after[i].p==after[i+1].p)
after[i].d=after[i+1].d=0;
}
for(int i=0;i<n;++i){
int a=order[i];
if(after[a].p<0||after[a].p>L)
cout<<"Fell off"<<endl;
else
cout<<after[a].p<<" "<<dirName[after[a].d+1]<<endl;
}
cout<<endl;
}
}