坑爹的模拟题QAQ DEBUG多了1kb QAQ

按题意做就行了

注意理解题意啊啊啊啊

尼玛输出忘换行wa了3次QAQ

CODE:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct node{
 int x,y,lx,ly;
 bool flag,alive;
 int age;
 int hp;
 double mx;
 int level;
}ant[8];
#define maxn 200100
double hp[maxn+10];
int map[20][20];//信息素
bool bo[20][20];
int p[30][2];
int w[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int dist(int x1,int y1,int x2,int y2){
 return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
}
double xa(int x1,int y1,int x2,int y2){
 return x1*y2-x2*y1;
}
bool cross(int x1,int y1,int x2,int y2,int x3,int y3){
 double d=sqrt(dist(x1,y1,x2,y2));
 if (x1==x3&&y1==y3) return 1;
 if (x2==x3&&y2==y3) return 1;
 int mxx=max(x1,x2),mxy=max(y1,y2),mnx=min(x1,x2),mny=min(y1,y2);
 if (mxx<x3||mxy<y3||mnx>x3||mny>y3) return 0;
 if (fabs(xa(x1-x3,y1-y3,x2-x3,y2-y3))/d<=0.5) return 1;
 return 0;
}
int init(){
 hp[0]=4;
 for (int i=1;i<=maxn;i++)
  if (i%6==1) hp[i]=1.1*hp[i-1];
  else hp[i]=hp[i-1];
}
int sum=0;
int born(int x){
 if (bo[0][0]) return 0;
 sum++;
 ant[x]=(node){0,0,0,0,0,1,0,hp[sum],hp[sum],(sum-1)/6+1};
 bo[0][0]=1;
 return 0;
}
bool cmp(node x,node y){
 if (x.alive&&y.alive) return x.age>y.age;
 return x.alive>y.alive;
}
int n,m;
bool iscake=1;
int move(int x){
 for (int t=1;t<=6&&ant[t].alive;t++) map[ant[t].x][ant[t].y]+=ant[t].flag?5:2;
 for (int t=1;t<=6&&ant[t].alive;t++){
  bool b=0;
  for (int i=0;i<4;i++){
   int nowx=ant[t].x+w[i][0],nowy=ant[t].y+w[i][1];
   if (nowx>=0&&nowx<=n&&nowy>=0&&nowy<=m&&!bo[nowx][nowy]&&(nowx!=ant[t].lx||nowy!=ant[t].ly)) b=1;
  }
  if (!b) {
    ant[t].lx=ant[t].x;ant[t].ly=ant[t].y;continue;
  }
  bo[ant[t].x][ant[t].y]=0;
  int mx=-0x7fffffff;
  for (int i=0;i<4;i++){
   int nowx=ant[t].x+w[i][0],nowy=ant[t].y+w[i][1];
   if (nowx>=0&&nowx<=n&&nowy>=0&&nowy<=m&&!bo[nowx][nowy]&&(nowx!=ant[t].lx||nowy!=ant[t].ly))
    mx=max(mx,map[nowx][nowy]);
  }
  for (int i=0;i<4;i++){
   int nowx=ant[t].x+w[i][0],nowy=ant[t].y+w[i][1];
   if (nowx>=0&&nowx<=n&&nowy>=0&&nowy<=m&&!bo[nowx][nowy]&&map[nowx][nowy]==mx&&(nowy!=ant[t].ly||nowx!=ant[t].lx)) {
    if ((ant[t].age+1)%5!=0) {
     swap(ant[t].x,ant[t].lx);
     swap(ant[t].y,ant[t].ly);
     ant[t].x=nowx;
     ant[t].y=nowy;
    }else for (int j=(i-1+4)%4;;j=(j-1+4)%4){
     int nowx=ant[t].x+w[j][0],nowy=ant[t].y+w[j][1];
     if (nowx>=0&&nowx<=n&&nowy>=0&&nowy<=m&&!bo[nowx][nowy]&&(nowy!=ant[t].ly||nowx!=ant[t].lx)) {
      swap(ant[t].x,ant[t].lx);
      swap(ant[t].y,ant[t].ly);
      ant[t].x=nowx;
      ant[t].y=nowy;
      break;
     }
    }
    break;
   }
  }
  bo[ant[t].x][ant[t].y]=1;
 }
 for (int t=1;t<=6&&ant[t].alive;t++)
  if (ant[t].x==n&&ant[t].y==m&&iscake){
   iscake=0;ant[t].flag=1;ant[t].hp=min(ant[t].hp+(int) (ant[t].mx)/2, (int) ant[t].mx);
  }
 return 0;
}
int r,d;
int attack(int x){
 int target=0;
 for (int t=1;t<=6&&ant[t].alive;t++)
  if (ant[t].flag&&dist(p[x][0],p[x][1],ant[t].x,ant[t].y)<=r*r) target=t;
 if (!target)
  for (int t=1;t<=6&&ant[t].alive;t++)
   if ((!target&&dist(p[x][0],p[x][1],ant[t].x,ant[t].y)<=r*r)||
   (target&&dist(p[x][0],p[x][1],ant[t].x,ant[t].y)<dist(p[x][0],p[x][1],ant[target].x,ant[target].y))) target=t;
 if (!target) return 0;
 for (int t=1;t<=6&&ant[t].alive;t++)
 if (cross(p[x][0],p[x][1],ant[target].x,ant[target].y,ant[t].x,ant[t].y)) ant[t].hp-=d;
 return 0;
}
bool check(){
 for (int t=1;t<=6&&ant[t].alive;t++){
  if (ant[t].hp<0) {
   ant[t].alive=0;
   bo[ant[t].x][ant[t].y]=0;
   if (ant[t].flag) iscake=1;
  }
 }
 for (int t=1;t<=6;t++) {
  if (!ant[t].alive) continue;
  if (ant[t].flag&&ant[t].x==0&&ant[t].y==0) return 1;
 }
 return 0;
}
int ending(){
 for(int i=0;i<=n;i++)
  for (int j=0;j<=m;j++)
   map[i][j]=max(0,map[i][j]-1);
 for (int i=1;i<=6;i++) ant[i].age++;
 return 0;
}
int s;
int solve(int x){
 for (int i=1;i<=6;i++)
  if (!ant[i].alive) {born(i);break;}
 sort(ant+1,ant+7,cmp);
 move(x);
 for (int i=1;i<=s;i++) attack(i); 
 if (check())return 1;
 ending();
 return 0;
}
int endprint(){
 sort(ant+1,ant+7,cmp);
 int sum;
 for (sum=1;sum<=6&&ant[sum].alive;sum++);
 printf("%d\n",sum-1);
 for (int i=1;i<=6&&ant[i].alive;i++) printf("%d %d %d %d %d\n",ant[i].age,ant[i].level,ant[i].hp,ant[i].x,ant[i].y);
 return 0;
}
int main(){
 init();
 scanf("%d%d",&n,&m);
 scanf("%d%d%d",&s,&d,&r);
 for (int i=1;i<=s;i++) {
  scanf("%d%d",&p[i][0],&p[i][1]);
  bo[p[i][0]][p[i][1]]=1;
 }
 int T;bool b=1;
 scanf("%d",&T);
 for (int i=1;i<=T;i++){
  if (solve(i)) {
   printf("Game over after %d seconds\n",i);
   b=0;
   break;
  }
 }
 if (b) printf("The game is going on\n");
 endprint();
 return 0;
}

BZOJ 1033: [ZJOI2008]杀蚂蚁antbuster(模拟)的更多相关文章

  1. [BZOJ 1033][ZJOI2008]杀蚂蚁antbuster

    1033: [ZJOI2008]杀蚂蚁antbuster Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1200  Solved: 507[Submi ...

  2. [BZOJ 1033] [ZJOI2008] 杀蚂蚁antbuster 【模拟!】

    题目链接: BZOJ - 1033 题目分析 模拟!纯粹按照题目描述模拟! 这是一道喜闻乐见的经典模拟题! 我一共写了2遍,Debug 历时2天的所有晚自习 ... 时间超过 8h ... 我真是太弱 ...

  3. BZOJ1033:[ZJOI2008]杀蚂蚁antbuster(模拟)

    Description 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右 下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试图把蛋糕搬回蚂蚁窝.而你的 ...

  4. [ZJOI2008]杀蚂蚁antbuster

    [ZJOI2008]杀蚂蚁antbuster 题目 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试 ...

  5. P2586 [ZJOI2008]杀蚂蚁(模拟)

    P2586 [ZJOI2008]杀蚂蚁 大模拟. 什么都不想补了. 看变量名感性理解吧 #include<iostream> #include<cstdio> #include ...

  6. 【BZOJ 1033】 [ZJOI2008]杀蚂蚁antbuster

    Description 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试图把蛋糕搬回蚂蚁窝.而你的任 ...

  7. bzoj千题计划121:bzoj1033: [ZJOI2008]杀蚂蚁antbuster

    http://www.lydsy.com/JudgeOnline/problem.php?id=1033 经半个下午+一个晚上+半个晚上 的 昏天黑地调代码 最终成果: codevs.洛谷.tyvj上 ...

  8. [bzoj1033] [ZJOI2008]杀蚂蚁antbuster

    Description 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试图把蛋糕搬回蚂蚁窝.而你的任 ...

  9. [ZJOI2008]杀蚂蚁antbuster 题解

    一个题目的可读版本:https://www.zybuluo.com/Jerusalem/note/221811 这两天做的又一道大模拟题,感觉这玩意有毒,会上瘾啊…… 比起猪国杀这道题真心不知道高到哪 ...

随机推荐

  1. xcode调试

    reference:http://www.cnblogs.com/ylkk_925/p/3238171.html 1.添加异常断点,快速定位抛出异常的代码位置,帮助快速解决Bug.(PS:可以在LLD ...

  2. Oracle数据库中的函数

    1.随机数函数:DBMS_RANDOM.RANDOM )) FROM DUAL; --产生一个100以内的随机数 *dbms_random.value) FROM dual; --产生一个100-10 ...

  3. java爬虫技术

    原博:http://983836259.blog.51cto.com/7311475/1730243 开源爬虫分类: 1.分布式爬虫:Nutch 2.JAVA单机爬虫:Crawler4j.WebMag ...

  4. 请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库

    转载请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库 1.下载最新的JDBC(2012/3/6) http://www.microsoft.com/downloads/zh-cn/de ...

  5. XML学习总结(二)——XML入门

    XML学习总结(二)——XML入门 一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(proc ...

  6. js原生之scrollTop、offsetHeight和offsetTop等属性用法详解

    scrollTop.offsetHeight和offsetTop等属性用法详解:标题中的几个相关相关属性在网页中有这大量的应用,尤其是在运动框架中,但是由于有些属性相互之间的概念比较混杂或者浏览器兼容 ...

  7. PHP 中使用socket

    一.开启socket phpinfo();查看是否开启了socket扩展,否则在php.ini中开启. 二.服务器端代码的写法 <?php error_reporting(E_ALL); set ...

  8. CFD-post的奇技淫巧

    此处记录两个后处理美化的技巧:1.关于contour显示的美化:2.关于legend的显示美化 1. 直接举例说明,现在cfd-post里导入了一个二维case,先建立一个plane: apply以后 ...

  9. 网格视图(GridView)功能和用法

    GridView用于在界面上按行.列分布的方式来显示多个组件.GridView和ListView有共同的父类:AbsListView,因此GridView和ListView具有很高的相似性,它们都是列 ...

  10. 超棒的30款JS类库和工具

    http://www.csdn.net/article/2013-07-01/2816068-best-javascript-libraries-and-tools