UVa --- 10881 Piotr's Ants 【思维】
来源:互联网 发布:手动 备份 hdfs 数据 编辑:程序博客网 时间:2024/06/01 09:44
传送门
//题意:给出一根长度为L的木棒上n只蚂蚁的初始坐标和运动方向, 速度是1cm/s,问T秒后每只蚂蚁的所在位置的情况和运动方向, 如果两只蚂蚁在运动中碰头了, 则这两只蚂蚁立刻掉头(不计时间), T秒后如果蚂蚁掉下木棒输出”Fell off”, 正在掉头输出”Turning”.
//这道题就很考思维了, 其实我们可以发现对于有一只蚂蚁起始为(1,R), 那么两秒后一定在(3,R) 出有一只蚂蚁, 如果没有碰头那么那只蚂蚁就是原先那只, 否则就是与这只蚂蚁碰了头的某只蚂蚁. ( 即把蚂蚁的碰头看作是对穿而过. 不会碰头 )
所以对于广泛一点的情况,
起始 : (1,R),(3,L),(8,L)
2秒后一定会有: (3,R), (1,L), (6,L).
到此我们可以发现, 其实前后两种情况的蚂蚁的相对位置没有变化, 即对前后两种情况按位置排完序之后, 对应的关系是一一对应的. 那么就比较好做了.
注意一点就是, 由于输入的顺序时任意的, 所以我们需要把之前的位置关系记下来. 并且处理下掉头的情况.
AC Code
/** @Cain*/const int maxn=1e4+5;int order[maxn];int cas=1;char *dirname[] = {"L","Turning","R"};struct node{ int pos,id,dir; //-1代表左, 0 表示正在掉头, 1 表示右 bool operator < (const node& a) const { return pos > a.pos; }}before[maxn],after[maxn];void solve(){ int L,T,n; scanf("%d%d%d",&L,&T,&n); for(int i=1;i<=n;i++){ int x; char s[10] = {0}; scanf("%d%s",&x,s); int d = s[0] == 'L'?-1:1; before[i] = (node){x,i,d}; after[i] = (node){x+T*d,0,d}; //编号不确定 } sort(before+1,before+n+1); sort(after+1,after+1+n); for(int i=1;i<=n;i++){ order[before[i].id] = i ; } for(int i=1;i<n;i++){ if(after[i].pos == after[i+1].pos ) after[i].dir = after[i+1].dir = 0; } printf("Case #%d:\n", cas++); for(int i=1;i<=n;i++){ int now = order[i]; if(after[now].pos < 0 || after[now].pos > L) printf("Fell off\n"); else printf("%d %s\n",after[now].pos,dirname[after[now].dir+1]); } printf("\n");}
阅读全文
0 0
- UVA 10881 Piotr's Ants (思维)
- Uva 10881 - Piotr's Ants( 转换思维 )
- UVA 10881 - Piotr's Ants(思维题)
- UVA 10881 Piotr's Ants(思维题)
- UVA.10881 Piotr's Ants (思维题)
- UVa 10881Piotr's Ants【思维】
- UVa --- 10881 Piotr's Ants 【思维】
- uva 10881 - Piotr's Ants (思维,3级)
- Uva 10881 Piotr's Ants (模拟+思维)
- UVA 10881 - Piotr's Ants(思维转换)
- UVa - 10881 - Piotr's Ants
- uva 10881 - Piotr's Ants
- Uva-10881-Piotr's Ants
- uva 10881 - Piotr's Ants
- UVa 10881 Piotr's Ants
- UVA 10881 Piotr's Ants
- Piotr's ants UVA 10881
- UVa 10881 - Piotr's Ants
- PHP中的比较运算符
- linux shell
- 关于React Native打包安卓项目
- Microsoft Edge 浏览器远程代码执行漏洞POC及细节(CVE-2017-8641)
- Linux vi方向键被转换为A B C D解决办法
- UVa --- 10881 Piotr's Ants 【思维】
- sql
- 绘制流程图技巧:图文演示怎么做流程图
- 使用xUtils网络开源框架请求数据
- 线程安全的单例模式
- cocos2d-x快速加按钮
- 收藏:电商、O2O:订单系统设计
- 排序算法(python)-希尔排序
- python系列一(变量类型)