hdu 1107 武林【模拟】
来源:互联网 发布:p2p网络借贷平台 调查 编辑:程序博客网 时间:2024/05/16 07:15
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1107
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>using namespace std;const int maxn=2000+10;typedef struct Node{ int x,y; int level,in,out,lift;//门派,内力,外力,生命值 bool flag,dir;//标记是否比过无,方向(正方向,反方向)};Node n[maxn];int map[13][13],num;int effect(int i)//计算战斗力{ switch(n[i].level) { case 1:return (int)(((0.5*n[i].in+0.5*n[i].out)*(n[i].lift+10)*1.0)/100); case 2:return (int)(((0.8*n[i].in+0.2*n[i].out)*(n[i].lift+10)*1.0)/100); case 3:return (int)(((0.2*n[i].in+0.8*n[i].out)*(n[i].lift+10)*1.0)/100); }}void move(int i)//移动{ if(n[i].level==1) { if(n[i].x==12&&n[i].dir) { n[i].dir=false; n[i].x--; } else if(n[i].x==1&&!n[i].dir) { n[i].dir=true; n[i].x++; } else { if(n[i].dir)n[i].x++; else n[i].x--; } } else if(n[i].level==2) { if(n[i].y==12&&n[i].dir) { n[i].dir=false; n[i].y--; } else if(n[i].y==1&&!n[i].dir) { n[i].dir=true; n[i].y++; } else { if(n[i].dir)n[i].y++; else n[i].y--; } } else { if(n[i].x==12&&n[i].y==1) return; if(n[i].x==1&&n[i].y==12) return; if((n[i].x==12||n[i].y==12)&&n[i].dir) { n[i].dir=false; n[i].x--; n[i].y--; } else if((n[i].x==1||n[i].y==1)&&!n[i].dir) { n[i].dir=true; n[i].x++; n[i].y++; } else { if(n[i].dir) { n[i].x++; n[i].y++; } else { n[i].x--; n[i].y--; } } }}void fight(){ for(int i=0;i<num;i++) n[i].flag=false; for(int i=0;i<num;i++) { if(map[n[i].x][n[i].y]==2&&n[i].lift>0&&!n[i].flag)//如果当前位置有2个人且此人生命值》0,未打过架 { for(int j=0;j<num;j++) { if(n[i].x==n[j].x&&n[i].y==n[j].y&&n[i].level!=n[j].level&&n[j].lift>0 )//这2人不同门派,此人未打过架,生命值》0 { int e1=effect(i); int e2=effect(j); n[i].lift-=e2; n[j].lift-=e1; n[i].flag=n[j].flag=true; } } } } memset(map,0,sizeof(map)); for(int i=0;i<num;i++)//更新每个人的位置 { move(i); if(n[i].lift>0) map[n[i].x][n[i].y]++; } }int main(){ int T,N,sum[4][2]; char c[2]; scanf("%d",&T); while(T--) { num=0; scanf("%d",&N); memset(map,0,sizeof(map)); while(~scanf("%s",c)&&c[0]!='0') { scanf("%d%d%d%d%d",&n[num].x,&n[num].y,&n[num].in,&n[num].out,&n[num].lift); n[num].dir=true; if(c[0]=='S')n[num].level=1; else if(c[0]=='W')n[num].level=2; else n[num].level=3; map[n[num].x][n[num].y]++; num++; } while(N--) { fight(); } memset(sum,0,sizeof(sum)); for(int i=0;i<num;i++) { if(n[i].level==1&&n[i].lift>0) { sum[1][0]++; sum[1][1]+=n[i].lift; } else if(n[i].level==2&&n[i].lift>0) { sum[2][0]++; sum[2][1]+=n[i].lift; } else if(n[i].level==3&&n[i].lift>0) { sum[3][0]++; sum[3][1]+=n[i].lift; } } for(int i=1;i<=3;i++) printf("%d %d\n",sum[i][0],sum[i][1]); printf("***\n"); } return 0;}
0 0
- 【模拟】HDU 1107 武林
- hdu 1107 武林【模拟】
- HDU 1107 武林(模拟)
- HDU 1107 武林(大模拟)
- HDU-武林-模拟
- HdU OJ 1107 武林 一只巨大的模拟
- HDU 1107 武林
- HDU 1107 武林
- HDU 1107 武林
- hdu1107武林(模拟题)
- HDU1107 武林 【模拟】
- hdu1107+武林+模拟
- HDU-1107-武林-2014-01-23 20:00:59
- hdu-1410-PK武林盟主
- 武林
- 武林
- OpenJudge百炼-2785-武林-C语言-模拟
- 组合计数中的隔板法 HDU 1410 PK武林盟主
- chapter8test2
- hdu 2039 三角形
- Android Gesture 手势识别使用实例
- javascript 排序方法
- Matlab GUI入门获取\设置界面控件的值
- hdu 1107 武林【模拟】
- JS笔记-JS基本架构
- Linux CentOS下Hadoop伪分布模式安装笔记
- 图象处理基本算法
- Android手势(上,下,左和右的判断)
- _int64 and long long 区别【转载】
- 从员工入职看不同规模公司管理层次的不同
- HDU--2018
- at android.widget.AbsListView.obtainView(AbsListView.java:2040)