nyist_990 蚂蚁感冒
来源:互联网 发布:映客刷钻石软件 编辑:程序博客网 时间:2024/04/28 18:28
速度是迷惑人的,蚂蚁开始的位置是确定的,走起来后相互间的位置也是确定的!!。蚂蚁最后走出去就好比:正负号相间的一个序列最后变为左半部位负号右半部为正号(负号代表向左走,正号代表向右走)。
#include<cstdio>#include<cstring>#include<iostream>using namespace std;int abs(int x) {return x>=0?x:-x;}int a[101],b[51],book[101];int main(){int n;while(~scanf("%d",&n)){memset(a,0,sizeof(a));memset(book,0,sizeof(book));int x;for(int i=1;i<=n;i++){ cin>>x; if(i==1) {book[abs(x)]=1;} if(x<0) a[-x]=-1; else a[x]=1; } //+1好比正号,-1代好比负号存在一个大小为100的数组int k=0;for(int i=1;i<=100;i++){ //针对每个i,a[i]可表示是否有蚂蚁并能表示方向(0为无蚂蚁,1为向右走的蚂蚁-1为..),book[i]表示是否被感染 if(a[i]) b[++k]=a[i]; //从大小100的a数组转存到大小50的数b组,(因为最多只有50只蚂蚁位置范围为100)同时book数组标记也要相应变化if(book[i]==1) {book[i]=0;book[k]=1;}}//最终数据转化储存在b数组,book随之标记对应蚂蚁是否被感染 int s=1;while(1){ int flag=1; for(int i=1;i<=k-1;i++) //遍历b数组,直到左半部为-1右半部为1时终止 { if(b[i]==1&&b[i+1]==-1) { //具体转化:相邻的(1,-1)为对向的蚂蚁可转为(-1,1)这时要i++ b[i]=-1;b[i+1]=1;flag=0; if(book[i]==1&&book[i+1]!=1){ book[i+1]=1;s++; } else if(book[i]!=1&&book[i+1]==1){ book[i]=1;s++; } i++;//ps:曾放在 falg=0;后面,犯了低级错误,多次wrong.. } } if(flag) break;}cout<<s<<endl;}return 0;}
1 0
- nyist_990 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 蚂蚁感冒
- 【固定资产】批量制单已删除,如何重新生成凭证
- XP找不到清理桌面向导的解决办法
- IOS-抽屉效果
- SetupDLL.cpp 错误
- Win2003下安装MSN
- nyist_990 蚂蚁感冒
- 关于迪士尼Disney乐拍通卡,一卡通卡的高清相片下载
- android fastLib中的网络模块使用
- 本博客暂停更新,新博客地址:http://www.jackeriss.com
- 进程间通信-消息队列
- Unity3D的UGUI里Text 组件怎么输入换行符的一个小技巧(新人)
- win7下破解不能向U盘copy数据
- linux 中的库
- 【bzoj1593】【poj3667】[Usaco2008 Feb]Hotel 旅馆