正题


大意

有n只蚂蚁,他们会往固定方向行走,行走速度相同,如果两只或多只相撞就会消除,求所有碰撞后剩余的蚂蚁数量


解题思路

将两只会相撞的蚂蚁碰撞的信息记录下来(包括需要多久后碰撞),然后将时间从小到大排序。

接下来要解决多只碰撞的问题,用两个数组表示以消除和已经有碰撞,然后如果发现这次的时间已经和上次的不一样了,就把已经碰撞的都标记为以消除。


代码

代码极丑无比
以下内容可能会引起你的不舒适,请选择性观看

include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct xjq/*啦啦啦啦啦*/{int fi,sn;double w;
}dis[2501];
int tot,n,ans;
double x[51],y[51],s;
char c[51];
bool tmp[51],e[51];
double abs(double x)
{if (x<0) return -x;else return x;
}
bool cmp(xjq x,xjq y)//排序用
{return x.w<y.w;
}
int main()
{scanf("%d",&n);scanf("\n");for (int i=1;i<=n;i++){cin>>c[i];}for (int i=1;i<=n;i++){scanf("%lf%lf",&x[i],&y[i]);}for (int i=1;i<=n;i++){for (int j=1;j<=n;j++){if (i==j) continue;if (x[i]==x[j] && y[i]==y[j]) //好像不会有这种情况,可以无视{dis[++tot].fi=i;dis[tot].sn=j;dis[tot].w=0;}else if (y[i]==y[j] && ((x[i]<x[j] && c[i]=='E' && c[j]=='W') || (x[i]>x[j] && c[i]=='W' && c[j]=='E')))//东西相撞{dis[++tot].fi=i;dis[tot].sn=j;dis[tot].w=abs(x[i]-x[j])/2;}else if (x[i]==x[j] &&((y[i]>y[j] && c[i]=='S' && c[j]=='N') || (y[i]<y[j] && c[i]=='N' && c[j]=='S')))//南北相撞{dis[++tot].fi=i;dis[tot].sn=j;dis[tot].w=abs(y[i]-y[j])/2;}else if (abs(x[i]-x[j])==abs(y[i]-y[j]))//直角相撞{if ((x[i]<x[j] && y[i]<y[j] && ((c[i]=='E' && c[j]=='S') || (c[i]=='N' && c[j]=='W')))||(x[i]>x[j] && y[i]>y[j] && ((c[i]=='W' && c[j]=='N') || (c[i]=='S' && c[j]=='E')))||(x[i]<x[j] && y[i]>y[j] && ((c[i]=='E' && c[j]=='N') || (c[i]=='S' && c[j]=='W')))||(x[i]>x[j] && y[i]<y[j] && ((c[i]=='W' && c[j]=='S') || (c[i]=='N' && c[j]=='E')))){dis[++tot].fi=i;dis[tot].sn=j;dis[tot].w=abs(y[i]-y[j]);}}}}ans=n;sort(dis+1,dis+tot+1,cmp);//排序for (int i=1;i<=tot;i++){if (dis[i].w>s){s=dis[i].w;for (int j=1;j<=n;j++)e[j]=tmp[j];//赋值}if (!e[dis[i].fi] && !e[dis[i].sn]){if (!tmp[dis[i].fi]) ans--;if (!tmp[dis[i].sn]) ans--;tmp[dis[i].fi]=true;tmp[dis[i].sn]=true;//printf("%d %d %lf\n",dis[i].fi,dis[i].sn,dis[i].w);}}printf("%d",ans);
}

【2018.4.14】模拟赛之二-ssl2392 蚂蚁【图论】相关推荐

  1. 2018.10.9模拟赛

    2018.10.9模拟赛 T1 trade 正解:贪心 据说lyd讲过但并没有印象QAQ,考场上现推浪费了不少时间 其实就开个小根堆,每次把堆顶取出来看它是不是比当前的 a[i]a[i]a[i] 小, ...

  2. 【蓝桥】第十一届软件类校内模拟赛(二)填空题部分

    起晚了起晚了,比赛都快结束了才整完qwq 文章目录 前言 填空题 1题目描述 2题目描述 3题目描述 4题目描述 前言 本题解为第十一届软件类校内模拟赛个人题解,但非官方满分题解,因此,可能存在下列问 ...

  3. 【蓝桥】软件校内模拟赛(二)反倍数 题目+题解

    文章目录 前言 反倍数 题目描述 前言 本题解为第十一届软件类校内模拟赛个人题解,但非官方满分题解,因此,可能存在下列问题 题意理解错误,导致答案错误. 代码中存在一些问题,导致答案错误. 算法复杂度 ...

  4. 【2018.3.31】模拟赛之二-ssl2407 负进制【贪心】

    正题 大意 将二进制从右到左的权值改为: 1,-2,4,-8,16,-32,64- 然后给出一个数用二进制表达出来,如: −13=110111=1×(−32)+1×16+1×4+1×(−2)+1×1− ...

  5. 【2018.5.19】模拟赛之二-ssl2433 文件名排序【字符串】

    正题 大意 一些文件名,有的有后缀,有的没有. 现在要求(先满足前者) 1. 没有后缀的排最后 2. 后缀字典序 3. 名字字典序 解题思路 首先按后缀排序如果后缀一样就名字排序,然后两次枚举先搞定有 ...

  6. 【2018.5.12】模拟赛之二-ssl2414 简写单词【字符串】

    正题 题目大意 若干个字符串,每个字符串求一个前缀,使只有这个字符串有这个前缀. 解题思路 O(n2)O(n2)O(n^2)枚举两个字符串,然后O(n)O(n)O(n)求出至少要取到哪里做前缀这两个字 ...

  7. 【2018.4.21】模拟赛之二-ssl2403 蜡烛【贪心】

    正题 大意 有n个蜡烛,第i个晚上要烧i根,没烧一个晚上蜡烛要消耗一个高度,求能烧多少个晚上. 解题思路 就是先烧高的,让剩下的蜡烛尽量多. 代码 #include<cstdio> #in ...

  8. 【2018.4.7】模拟赛之二-ssl2383 睡眠【水题】

    正题 大意 输入两个时间点表示起床的时间和睡了多久求开始睡觉的时间 解题思路 直接计算,水题不解释 代码 #include<cstdio> using namespace std; int ...

  9. 【2018.3.24】模拟赛之二-ssl2546 求和【贪心】

    前言 依据十分的水,其实我依据是不想写的,依旧是老师要求的QAQ 正题 大意 有一个数S,通过然后在1-n自然数前加上"+"或"-"使其等于S,求最小的n 解题 ...

最新文章

  1. 232.用栈实现队列
  2. OpenGL的简单研究-开端
  3. div的contentEnable属性
  4. 'SVN更新' has encountered a problem :An internal error occurred during: svn错误
  5. 使用Java查询DynamoDB项
  6. 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案
  7. linux + nginx + mysql + php 百度网盘_5.LNMP(Linux + Nginx + MySQL + PHP)环境安装
  8. Object to XML
  9. 手机安装linux不root权限管理,不root手机也能使用linux环境并安装msf等工具
  10. 信息学奥赛C++语言:斗转星移
  11. 使用 ADO.NET 和 Oracle 进行高级数据访问
  12. 为AI芯片铺路?原三星半导体周军加盟Rokid
  13. [常用]MySQL管理工具和应用程序
  14. R语言:时间序列ARIMA模型使用
  15. 9种缺陷管理工具对比Bugzilla、testRail、TestLink、redmine、禅道、CODING、jira、TAPD、PingCode
  16. Python:1019 数字黑洞
  17. 中柏平板u盘启动_中柏笔记本一键U盘重装系统教程图解
  18. 数据错误循环冗余检查是什么意思_将解耦功能集成到电源中,会发生什么?
  19. 2750 心系南方灾区
  20. Linux公社FTP服务器地址及用户名密码

热门文章

  1. mysql中如何计算党龄_党员的党龄如何计算?
  2. action评测 osmo_前后双屏 大疆OSMO ACTION运动相机评测
  3. 电子商务与计算机科学与技术的相关性,电子商务、计算机科学与技术、法学等相关专业。.doc...
  4. 用keil怎么擦除_分享STM32 FLASH 擦除(以及防止误擦除程序代码)、写入
  5. 7-21 求前缀表达式的值 (25 分)(思路详解)
  6. 7-15 QQ帐户的申请与登陆 (25 分)(map做法+思路分析)
  7. C++从vector中删除指定元素
  8. C++,Java编程中 标识符 常见命名约定
  9. ap计算机科学课程内容,AP计算机科学课程补习有哪些知识点梳理?
  10. matlab中图像轮廓变细,Matlab中,用bwmorph函数提取二进制图像的轮廓