【算法设计与分析】蚂蚁
算法2016-06-30
【题目】
【输入输出】
【样例】
【源代码】
<span style="font-family:Microsoft YaHei;font-size:24px;">#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; const int maxn=10005; struct ants { int id ; //输入序号 int pos ; //在小木棍上的顺序 int status ; //状态 bool operator <( const ants an) const//排序 { return pos<an.pos; } }begins[maxn],ends[maxn]; int order[maxn]; int main() { int test; int T,L,n; char str; int a; scanf("%d",&test);//测试组数 for(int k=1;k<=test;k++) { printf("Case #%d:\n",k);//输入第几组数据 scanf("%d%d%d",&L,&T,&n);//木棍长度,爬行时间,共几只蚂蚁 // printf("L=%d T=%d n=%d\n",L,T,n); for(int j=0;j<n;j++) { scanf("%d %c",&a,&str);//输入第j只蚂蚁的状态 int value=(str=='L')?-1:1;//如果蚂蚁的状态为左,返回-1,否则返回为1 begins[j]=(ants){j,a,value};//第j只蚂蚁的初始状态 ends[j]=(ants){j,a+T*value,value};//第j只蚂蚁的最后状态。不考虑蚂蚁调转的情况 // printf("begin[%d]=%d end[%d]=%d\n",k,begin[k],k,end[k]); } sort(begins,begins+n);//对蚂蚁进行排序 for(int i=0;i<n;i++)//对蚂蚁的顺序进行排序,并且记录该蚂蚁的位置 order[begins[i].id]=i; sort(ends,ends+n);//根据最后的状态进行排序 for(int i=0;i<n-1;i++) if(ends[i].pos==ends[i+1].pos)//如果第i个蚂蚁的位置和第i+1个相同,那么两只蚂蚁的状态标记为0 ends[i].status=ends[i+1].status=0; char chastr[][10]={"L","Turning","R"};//用一个数组存储状态值 for(int i=0;i<n;i++) { int a=order[i]; if(ends[a].pos<0||ends[a].pos>L) printf("Fell off\n"); else printf("%d %s\n",ends[a].pos,chastr[ends[a].status+1]); } printf("\n"); } return 0; } </span>
【简述】
来一组数据测试就会发现,出发前和出发后,每一个蚂蚁的相对位置都是不变的,然后 看代码的注释,很详细