#include<bits/stdc++.h>
using namespace std;
int n;
int ans=0,sum=0;//回合数,buff数
struct ren{//角色
int HP,hp;//血量,上限血量
int MP,mp;//能量,能量上限
int akt,zatk;//基础攻击力,攻击力增益
int def,zdef;//基础防御力,防御力增益
int talent,tx,ty;//天赋,天赋参数
int skill,sx,sy,sz;//技能,技能参数
int p,id;//优先攻击目标,所属阵营
bool die;//是否死亡
int pr[11];//优先攻击顺序
};
struct dui{//团队
ren ra[11];//团队角色
int num;//队伍剩余人数
}t[3];
struct tt{
int id,d,x,y,z;//编号,队伍,buff时间开头,结尾,增加量
}buff[50100];//buff增益
bool qus(){//是否有输赢
if(!t[1].num||t[2].num)return 0;
return 1;
}
void shanghai(int l,int r,int d,int x,int y){//减少生命
for(int i=l;i<=r;i++){
if(!t[d].ra[i].die){
t[d].ra[i].MP++;
if(t[d].ra[i].talent==1)t[d].ra[i].HP-=(max(x-max(t[d].ra[i].def+t[d].ra[i].zdef,0),0)+y-y/2);
if(t[d].ra[i].talent!=1)t[d].ra[i].HP-=(max(x-max(t[d].ra[i].def+t[d].ra[i].zdef,0),0)+y);
if(t[d].ra[i].HP<=0){
t[d].ra[i].HP=0;
t[d].ra[i].die=1;
t[d].num-=1;
}
}
}
}
void jineng(int j,int d){//发动技能
t[d].ra[j].MP=0;
int bian=t[d].ra[j].skill;
if(bian==0)return;//0.心态崩了!
else if(bian==1){//1.格林炸裂!
if(d==1){
shanghai(1,n,2,t[d].ra[j].sx,0);
for(int i=1;i<=n;i++){
t[2].ra[j].MP-=t[2].ra[j].MP/10;
if(t[2].ra[j].MP<0)t[2].ra[j].MP==0;
}
}
if(d==2){
shanghai(1,n,2,t[d].ra[j].sx,0);
for(int i=1;i<=n;i++){
t[1].ra[j].MP-=t[1].ra[j].MP/10;
if(t[1].ra[j].MP<0)t[1].ra[j].MP==0;
}
}
}
else if(bian==2){//2.日 (zhou) 昇 (ji) 之 (dao) 雨 (dan)!!
if(d==1)shanghai(1,n,2,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));
if(d==2)shanghai(1,n,1,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));
}
else if(bian==3){//3.天楼霸断剑!
if(d==1)for(int i=1;i<=n;i++){if(!t[2].ra[t[d].ra[j].pr[i]].die)shanghai(t[d].ra[j].pr[i],t[d].ra[j].pr[i],2,min(t[2].ra[j].hp/10,t[d].ra[j].sx*max(t[d].ra[j].akt+t[d].ra[j].zatk,1)),0);break;}
if(d==2)for(int i=1;i<=n;i++){if(!t[1].ra[t[d].ra[j].pr[i]].die)shanghai(t[d].ra[j].pr[i],t[d].ra[j].pr[i],2,min(t[1].ra[j].hp/10,t[d].ra[j].sx*max(t[d].ra[j].akt+t[d].ra[j].zatk,1)),0);break;}
}
else if(bian==4){//4.演出开始!
sum++;
buff[sum].id=1;
buff[sum].x=ans;
buff[sum].y=ans+t[d].ra[j].sx-1;
buff[sum].z=t[d].ra[j].sy;
buff[sum].d=d;
}
else if(bian==5){//5.天狼噬斩!
if(d==1){
for(int i=1;i<=n;i++){
if(!t[2].ra[t[d].ra[j].pr[i]].die){
t[2].ra[t[d].ra[j].pr[i]].zdef-=t[d].ra[j].sx;
if(t[2].ra[t[d].ra[j].pr[i]].zdef<0)t[2].ra[t[d].ra[j].pr[i]].zdef=0;
shanghai(i,i,2,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));
break;
}
}
}
if(d==2){
for(int i=1;i<=n;i++){
if(!t[1].ra[t[d].ra[j].pr[i]].die){
t[1].ra[t[d].ra[j].pr[i]].zdef-=t[d].ra[j].sx;
if(t[1].ra[t[d].ra[j].pr[i]].zdef<0)t[1].ra[t[d].ra[j].pr[i]].zdef=0;
shanghai(i,i,1,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));
break;
}
}
}
}
else if(bian==6){//6.地 (太) 球 (虚) 蓝 (苍) 色 (蓝) 闪 (闪) 电!
if(d==1){
for(int i=1;i<=n;i++){if(!t[2].ra[t[d].ra[j].pr[i]].die)shanghai(i,i,2,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));break;}
sum++;
buff[sum].id=2;
buff[sum].x=ans;
buff[sum].y=ans+t[d].ra[j].sx-1;
buff[sum].z=t[d].ra[j].sy;
buff[sum].d=d;
}
if(d==2){
for(int i=1;i<=n;i++){if(!t[1].ra[t[d].ra[j].pr[i]].die)shanghai(i,i,1,0,max(t[d].ra[j].akt+t[d].ra[j].zatk,1));break;}
sum++;
buff[sum].id=2;
buff[sum].x=ans;
buff[sum].y=ans+t[d].ra[j].sx-1;
buff[sum].z=t[d].ra[j].sy;
buff[sum].d=d;
}
}
else if(bian==7){//7.极光绽放!
int minn=1;
for(int i=2;i<=n;i++){
if(!t[d].ra[i].die){
if(t[d].ra[i].HP<t[d].ra[minn].HP)minn=i;
else if(t[d].ra[i].HP<t[d].ra[minn].HP){
if(i<minn)minn=i;
}
}
}
t[d].ra[minn].HP+=t[d].ra[j].sz;
if(t[d].ra[minn].HP>t[d].ra[minn].hp)t[d].ra[minn].HP=t[d].ra[minn].hp;
sum++;
buff[sum].id=3;
buff[sum].x=ans;
buff[sum].y=ans+t[d].ra[j].sx-1;
buff[sum].z=t[d].ra[j].sy;
buff[sum].d=d;
}
else if(bian==8){//8.流星!
if(d==1)shanghai(1,n,2,max(t[d].ra[j].akt+t[d].ra[j].zatk,1),0);
if(d==2)shanghai(1,n,1,max(t[d].ra[j].akt+t[d].ra[j].zatk,1),0);
sum++;
buff[sum].id=4;
buff[sum].x=ans;
buff[sum].y=ans+t[d].ra[j].sx-1;
buff[sum].z=t[d].ra[j].sy;
buff[sum].d=d;
}
else if(bian==9){//9.精灵庇护!
for(int i=1;i<=n;i++){
t[d].ra[i].HP+=t[d].ra[i].sz;
if(t[d].ra[i].HP>t[d].ra[i].hp)t[d].ra[i].HP=t[d].ra[i].hp;
}
sum++;
buff[sum].id=5;
buff[sum].x=ans;
buff[sum].y=ans+t[d].ra[j].sx-1;
buff[sum].z=t[d].ra[j].sy;
buff[sum].d=d;
}
else if(bian==10){//10.全力超全开!轮回之终末!
for(int i=1;i<=n;i++){
t[d].ra[i].akt*=2;t[d].ra[i].def*=2;
t[d].ra[i].MP=max(t[d].ra[i].mp/2,t[d].ra[i].MP);
t[d].ra[i].HP=max(t[d].ra[i].hp/2,t[d].ra[i].HP);
}
sum++;
buff[sum].id=6;
buff[sum].x=ans;
buff[sum].y=ans+t[d].ra[j].sx-1;
buff[sum].z=t[d].ra[j].sy;
buff[sum].d=d;
for(int i=1;i<=n;i++)if(t[d].ra[i].skill==10)t[d].ra[i].skill=0;
}
}
int jisuan(int j,int d,int dj){//计算伤害
int oo=0,maxx;
if(d==1)oo=2;
if(d==2)oo=1;
if(t[d].ra[j].talent==2){
maxx=max(max(t[d].ra[j].akt+t[d].ra[j].zatk,1)-max(t[d].ra[j].def+t[d].ra[j].zdef,0),0)+t[d].ra[j].tx;
if(t[oo].ra[dj].talent==1)maxx-=t[d].ra[j].tx/2;
}
else if(t[d].ra[j].talent==4){
maxx=max(t[d].ra[j].akt+t[d].ra[j].zatk,1);
if(t[oo].ra[dj].talent==1)maxx-=max(t[d].ra[j].akt+t[d].ra[j].zatk,1)/2;
}else{
maxx=max(max(t[d].ra[j].akt+t[d].ra[j].zatk,1)-max(t[d].ra[j].def+t[d].ra[j].zdef,0),0);
}
return maxx;
}
int main(){
//输入
cin>>n;
for(int k=1;k<=2;k++){
t[k].num=n;
for(int i=1;i<=n;i++){
cin>>t[k].ra[i].hp>>t[k].ra[i].mp>>t[k].ra[i].akt>>t[k].ra[i].def;
for(int o=1;o<=n;o++)cin>>t[k].ra[i].pr[o];
cin>>t[k].ra[i].talent>>t[k].ra[i].tx>>t[k].ra[i].ty;
cin>>t[k].ra[i].skill>>t[k].ra[i].sx>>t[k].ra[i].sy>>t[k].ra[i].sz;
}
}
while(qus()){//回合
ans++;//回合++
for(int k=1;k<=2;k++){//Alice与Bob行动
int oo=0;
if(k==1)oo=2;
if(k==2)oo=1;
int jeuse[20];
bool a=0;
for(int i=1;i<=n;i++){
if(t[k].ra[i].mp==t[k].ra[i].MP && !t[k].ra[i].die)a=1;
}
if(a){//有技能
//找最适合的人
int shu=0;
for(int i=1;i<=n;i++){
if(t[k].ra[i].mp==t[k].ra[i].MP && !t[k].ra[i].die){
shu++;
jeuse[shu]=i;
}
}
int youxian=jeuse[1];
for(int i=2;i<=shu;i++){
if(t[k].ra[jeuse[i]].skill>t[k].ra[youxian].skill)youxian=jeuse[i];
else if(t[k].ra[jeuse[i]].skill==t[k].ra[youxian].skill){
if(jeuse[i]>youxian)youxian=jeuse[i];
}
}
jineng(youxian,1);
if(t[k].ra[youxian].talent==5&&t[oo].num!=0){
t[k].ra[youxian].MP+=t[k].ra[youxian].ty;
if(t[k].ra[youxian].MP>t[k].ra[youxian].mp)t[k].ra[youxian].MP=t[k].ra[youxian].mp;
}
}else{//无技能
//找最适合的人
int maxx=1,maxxd=0;
for(int i=1;i<=n;i++){
if(!t[oo].ra[t[k].ra[1].pr[i]].die){
maxxd=t[k].ra[1].pr[i];
break;
}
}
//算造成伤害大小
for(int o=2;o<=n;o++){
for(int i=1;i<=n;i++){
if(!t[oo].ra[t[k].ra[o].pr[i]].die){
if(t[oo].ra[t[k].ra[o].pr[i]].HP>maxxd){
maxxd=t[k].ra[o].pr[i];
maxx=o;
}
}
}
}
int v[20],sum=1;
v[1]=maxx;
for(int o=2;o<=n;o++){
for(int i=1;i<=n;i++){
if(t[oo].ra[t[k].ra[o].pr[i]].HP==t[oo].ra[maxxd].HP){
sum++;
v[sum]=t[k].ra[o].pr[i];
}
}
}
if(sum>1){//二次找人
int maxxx=sum;
for(int o=sum-1;o>=1;o--){
if(jisuan(v[o],k,maxxd)>jisuan(v[maxxx],k,maxxd)){
maxxx=o;
}
}
if(t[k].ra[maxxx].talent==2)shanghai(maxxd,maxxd,k,t[k].ra[maxxx].akt,t[k].ra[maxxx].tx);
if(t[k].ra[maxxx].talent==4)shanghai(maxxd,maxxd,k,0,t[k].ra[maxxx].akt+t[k].ra[maxxx].zatk);
if(t[k].ra[maxxx].talent==0||t[k].ra[maxxx].talent==1||t[k].ra[maxxx].talent==3||t[k].ra[maxxx].talent==5)shanghai(maxxd,maxxd,k,t[k].ra[maxxx].akt,0);
if(t[k].ra[maxxx].talent==5){
t[k].ra[maxxx].HP+=t[k].ra[maxxx].tx;
if(t[k].ra[maxxx].HP>t[k].ra[maxxx].hp)t[k].ra[maxxx].HP=t[k].ra[maxxx].hp;
}
}else{
if(t[k].ra[maxx].talent==2)shanghai(maxxd,maxxd,k,t[k].ra[maxx].akt,t[k].ra[maxx].tx);
if(t[k].ra[maxx].talent==4)shanghai(maxxd,maxxd,k,0,t[k].ra[maxx].akt+t[k].ra[maxx].zatk);
if(t[k].ra[maxx].talent==0||t[k].ra[maxx].talent==1||t[k].ra[maxx].talent==3||t[k].ra[maxx].talent==5)shanghai(maxxd,maxxd,k,t[k].ra[maxx].akt,0);
if(t[k].ra[maxx].talent==5){
t[k].ra[maxx].HP+=t[k].ra[maxx].tx;
if(t[k].ra[maxx].HP>t[k].ra[maxx].hp)t[k].ra[maxx].HP=t[k].ra[maxx].hp;
}
}
}
//行动结束,开始加buff
for(int i=1;i<=sum;i++){
if(buff[i].id==1){//4.的buff
if(buff[i].x<=ans&&buff[i].y>=ans){
for(int o=1;o<=n;o++){
if(!t[k].ra[o].die){
t[k].ra[o].MP+=buff[i].z;
if(t[k].ra[o].MP>t[k].ra[o].mp)t[k].ra[o].MP=t[k].ra[o].mp;
}
}
}
}
if(buff[i].id==2){//6.的buff
if(buff[i].x<=ans&&buff[i].y>=ans){
for(int o=1;o<=n;o++){
int oo=0;
if(k==1)oo=2;
if(k==2)oo=1;
if(!t[oo].ra[o].die){
t[oo].ra[o].zatk-=buff[i].z;
if(t[oo].ra[o].zatk<0)t[oo].ra[o].zatk=0;
}
}
}
}
if(buff[i].id==3){//7.的buff
if(buff[i].x<=ans&&buff[i].y>=ans){
for(int o=1;o<=n;o++){
if(!t[k].ra[o].die){
t[k].ra[o].zatk+=buff[i].z;
}
}
}
}
if(buff[i].id==4){//8.的buff
if(buff[i].x<=ans&&buff[i].y>=ans){
for(int o=1;o<=n;o++){
int oo=0;
if(k==1)oo=2;
if(k==2)oo=1;
if(!t[oo].ra[o].die){
t[oo].ra[o].zdef-=buff[i].z;
if(t[oo].ra[o].zdef<0)t[oo].ra[o].zdef=0;
}
}
}
}
if(buff[i].id==5){//9.的buff
if(buff[i].x<=ans&&buff[i].y>=ans){
for(int o=1;o<=n;o++){
if(!t[k].ra[o].die){
t[k].ra[o].zdef+=buff[i].z;
}
}
}
}
if(buff[i].id==6){//10.的buff
if(buff[i].x<=ans&&buff[i].y>=ans){
for(int o=1;o<=n;o++){
t[k].ra[o].MP+=buff[i].z;
if(t[k].ra[o].MP>t[k].ra[o].mp)t[k].ra[o].MP=t[k].ra[o].mp;
}
}
}
if(buff[i].id==6){//最后的挣扎,全队趋势
if(buff[i].y<ans){
for(int o=1;o<=n;o++){
t[k].ra[o].die=1;
}
t[k].num=0;
}
}
for(int o=1;o<=n;o++){//天赋3:心胜于物
if(t[k].ra[o].talent==3){
t[k].ra[o].HP+=t[k].ra[o].tx;
t[k].ra[o].MP+=t[k].ra[o].ty;
if(t[k].ra[o].HP>t[k].ra[o].hp)t[k].ra[o].HP=t[k].ra[o].hp;
if(t[k].ra[o].MP>t[k].ra[o].mp)t[k].ra[o].MP=t[k].ra[o].mp;
}
}
}
}
}
//输出
cout<<ans<<'\n';
if(t[1].num==0){
cout<<"Bob"<<'\n';
for(int i=1;i<=n;i++){
if(t[2].ra[i].die)cout<<0<<" ";
else cout<<t[2].ra[i].HP<<" ";
}
}else{
cout<<"Alice"<<'\n';
for(int i=1;i<=n;i++){
if(t[1].ra[i].die)cout<<0<<" ";
else cout<<t[1].ra[i].HP<<" ";
}
}
return 0;
}
本蒟蒻一次写大模拟求条!!!!!