日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1456. [UVa 10881,Piotr's Ants]螞蟻

★?? 輸入文件:Ants.in?? 輸出文件:Ants.out???簡單對比
時間限制:1 s?? 內存限制:128 MB

【題目描述】

?

【輸入格式】

?

【輸出格式】

對于每組數據,輸出n(Case #n:),按輸入順序輸出每只螞蟻的位置和朝向(Turning表示正在碰撞)。在T秒之前已經掉落的螞蟻(正好爬到邊緣不算)輸出Fell off

【樣例輸入】

2 10 1 4 1 R 5 R 3 L 10 R 10 2 3 4 R 5 L 8 R

【樣例輸出】

Case #1: 2 Turning 6 R 2 Turning Fell off Case #2: 3 L 6 R 10 R

【來源】

UVa 10881,Piotr's Ants

思路:

  假設你在遠處觀察這些螞蟻的運動,會看到什么?一群密密麻麻的小黑點在移動。由于黑點太小,所以當螞蟻一碰撞而掉頭時,看上去和兩個點”對穿而過“沒有什么區別。換句話說,如果把螞蟻看做是沒有區別的小點,那么只需要計算出每只螞蟻在T時刻的位置即可。比如,有3只螞蟻,螞蟻1=(1,R),螞蟻2=(3,L),螞蟻3=(4,L),則兩秒之后,三只螞蟻分別為(3,R),(1,L)和(2,L)。

  注意,雖然從整體上講,”掉頭“等價于”對穿而過“,但對于每只螞蟻而言,并不是這樣。螞蟻1的初始狀態為(1,R),因此一定有一只螞蟻在兩秒鐘之后處于(3,R)的狀態,但這只螞蟻卻不一定是螞蟻1.換句話說,我們需要搞清楚目標狀態中的”誰是誰“。

  可以想象一下,所有螞蟻的相對順序是保持不變的。然后這個問題就很好解決了。

這是代碼:

#include<map> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 10001 using namespace std; map<int,int>vis; int T; int len,t,n,num; struct nond{int pos,turn,id; }v[MAXN],vv[MAXN]; int cmp(nond a,nond b){return a.pos<b.pos; } int cmp1(nond a,nond b){return a.id<b.id; } int main(){freopen("Ants.in","r",stdin);freopen("Ants.out","w",stdout);scanf("%d",&T);for(int k=1;k<=T;k++){vis.clear();memset(v,0,sizeof(v));memset(vv,0,sizeof(vv));printf("Case #%d:",k);scanf("%d%d%d",&len,&t,&n);for(int i=1;i<=n;i++){char c;scanf("%d %c",&v[i].pos,&c);if(c=='R') v[i].turn=1;else v[i].turn=-1;v[i].id=i;vv[i]=v[i];}sort(v+1,v+1+n,cmp);sort(vv+1,vv+1+n,cmp);for(int i=1;i<=n;i++){if(vv[i].turn==-1) vv[i].pos-=t;else if(vv[i].turn==1) vv[i].pos+=t;if(vv[i].pos>len||vv[i].pos<0) vv[i].turn=0;else vis[vv[i].pos]++; }sort(vv+1,vv+1+n,cmp);for(int i=1;i<=n;i++){v[i].pos=vv[i].pos;v[i].turn=vv[i].turn;}sort(v+1,v+1+n,cmp1);for(int i=1;i<=n;i++){if(v[i].turn==0) cout<<"Fell off"<<endl;else if(vis[v[i].pos]!=1) cout<<v[i].pos<<" "<<"Turning"<<endl;else if(v[i].turn==1) cout<<v[i].pos<<" "<<"R"<<endl;else cout<<v[i].pos<<" "<<"L"<<endl;}} }

?

轉載于:https://www.cnblogs.com/cangT-Tlan/p/7725913.html

總結

以上是生活随笔為你收集整理的cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。