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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

蚂蚁--模拟

發布時間:2025/6/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蚂蚁--模拟 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一根長度為L厘米的木棍上有n只螞蟻,每只螞蟻要么朝左爬,要么朝右爬,速度為1厘米/秒。當兩只螞蟻相撞時,二者同時掉頭(掉頭時間忽略不計)。給出每只螞蟻的初始位置和朝向,計算T秒之后每只螞蟻的位置。


輸入格式:

輸入的第一行為數據組數。每組數據的第一行為3個正整數L、T、n(0<=n<=10000);以下n行每行描述一只螞蟻的初始位置,其中,整數x為螞蟻距離木棍左端的距離(單位:厘米),字母表示初始朝向(L表示朝左,R表示朝右)。

輸出格式:

對于每組數據,輸出n行,按輸入順序輸出每只螞蟻的位置和朝向(Turing表示正在碰撞)。在第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 Turing

6 R

2 Turing

Fell off


Case #2:

3 L

6 R

10 R


解:

[cpp]?view plaincopyprint?
  • #include<cstdio>??
  • #include<algorithm>??
  • using?namespace?std;??
  • ??
  • const?int?maxn?=?10000+5;??
  • const?char?dirName[][10]?=?{"L",?"Turing",?"R"};??
  • int?order[maxn];????????//輸入的第i只螞蟻是終態中的左數第order[i]只螞蟻??
  • struct?Ant??
  • {??
  • ????int?id;?????//輸入順序??
  • ????int?p;??????//位置??
  • ????int?d;??????//朝向。-1:左;0:轉身中;1:右??
  • ????bool?operator?<?(const?Ant?&a)?const??
  • ????{??
  • ????????return?p?<?a.p;??
  • ????}??
  • }before[maxn],?after[maxn];??
  • ??
  • int?main()??
  • {??
  • ????int?K;??
  • ????scanf("%d",?&K);??
  • ????for(int?ki?=?1;?ki?<=?K;?ki++)??
  • ????{??
  • ????????int?L,?T,?n;??
  • ????????scanf("%d%d%d",?&L,?&T,?&n);??
  • ????????for(int?i?=?0;?i?<?n;?i++)??
  • ????????{??
  • ????????????int?p,?d;??
  • ????????????char?c;??
  • ????????????scanf("%d?%c",?&p,?&c);??
  • ????????????d?=?(c=='L')???-1?:?1;??
  • ????????????before[i].id?=?i;?before[i].p?=?p;?before[i].d?=?d;??
  • ????????????after[i].id?=?0;?after[i].p?=?p+T*d;?after[i].d?=?d;????//此處id還是未知的,用0代替??
  • ????????}??
  • ??????????
  • ????????//計算次序數組??
  • ????????sort(before,?before+n);??
  • ????????for(i?=?0;?i?<?n;?i++)??
  • ????????????order[before[i].id]?=?i;??
  • ??
  • ????????//計算終態,保持原態或其它態??
  • ????????sort(after,?after+n);??
  • ????????for(i?=?0;?i?<?n-1;?i++)??
  • ????????????if(after[i].p?==?after[i+1].p)?after[i].d?=?after[i+1].d?=?0;??
  • ??
  • ????????//輸出結果??
  • ????????printf("Case?#%d:\n",?ki);??
  • ????????for(i?=?0;?i?<?n;?i++)??
  • ????????{??
  • ????????????int?a?=?order[i];//恢復輸入次序??
  • ????????????if(after[a].p?<?0?||?after[a].p?>?L)?printf("Fell?off\n");??
  • ????????????else?printf("%d?%s\n",?after[a].p,?dirName[after[a].d+1]);??
  • ????????}??
  • ????????printf("\n");??
  • ????}??
  • ????return?0;??
  • }??

  • 運行結果:


    總結

    以上是生活随笔為你收集整理的蚂蚁--模拟的全部內容,希望文章能夠幫你解決所遇到的問題。

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