#include // cout, endl, cin #include // string, to_string, stoi #include // vector #include // min, max, swap, sort, reverse, lower_bound, upper_bound #include // pair, make_pair #include // tuple, make_tuple #include // int64_t, int*_t #include // printf #include // map #include // queue, priority_queue #include // set #include // stack #include // deque #include // unordered_map #include // unordered_set #include // bitset #include // isupper, islower, isdigit, toupper, tolower #include //fixed,setprecision #include //INT_MAX #include //M_PI #include #include // 正規表現 #include #include #include #include #include #include #include #include #include #include //複素数 //#include using namespace std; #define ll long long #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) template < typename T > std::string to_string( const T& n ){std::ostringstream stm ;stm << n ;return stm.str() ;} int RandInt(int L,int R){ return rand()%(R-L+1)+L; } int N,M; vector A; vector moto_A; vector>>> bomb; vector> ans; vector>tatemono; vector>bakudanya; vectorbakuha_zahyo; int max_cnt_num=1; int max_cnt=0; int min_cost_num=1; int min_cost=1<<30; int bakudan_cnt=0; void input(){ cin>>N>>M; A.resize(N); moto_A.resize(N); for(int i=0; i>A[i]; moto_A[i]=A[i]; } bomb.resize(M); for(int i=0; i>C>>L; bomb[i].first=C;//first:Cost if(min_cost>C){ min_cost=C; min_cost_num=i+1; } if(max_cnt>a>>b; bomb[i].second.push_back(make_pair(a,b));//second.first:壊せるマスのiからのx方向距離 second.second: y方向距離 } } } void bakuha(int i,int j,int num){ num--; //cerr<=N||y<0||y>=N)continue; //cerr<<"a"; A[x][y]='.'; } } void mukau(int sx,int sy,int gx,int gy){ if(sx ido(int nowx,int nowy,int bakuhax,int bakuhay,int num){ num--; int kyori=2500; int gx=10000; int gy=10000; rep(ni,bomb[num].second.size()){ int x=bakuhax-bomb[num].second[ni].first; int y=bakuhay-bomb[num].second[ni].second; //cerr<=N||y<0||y>=N)continue; if(abs(x-nowx)+abs(y-nowy)&bakuha_zahyo,int num){ num--; vectoriranai(bakuha_zahyo.size(),0); vector>masu(N,vector(N,0)); rep(nj,bakuha_zahyo.size()){ int i=bakuha_zahyo[nj]/N; int j=bakuha_zahyo[nj]%N; rep(ni,bomb[num].second.size()){ int x=i+bomb[num].second[ni].first; int y=j+bomb[num].second[ni].second; if(x<0||x>=N||y<0||y>=N)continue; masu[x][y]++; } } rep(nj,bakuha_zahyo.size()){ int i=bakuha_zahyo[nj]/N; int j=bakuha_zahyo[nj]%N; bool hantei=true; rep(ni,bomb[num].second.size()){ int x=i+bomb[num].second[ni].first; int y=j+bomb[num].second[ni].second; if(x<0||x>=N||y<0||y>=N)continue; if(masu[x][y]<=1&&moto_A[x][y]!='.')hantei=false; } if(hantei){ iranai[nj]=1; rep(ni,bomb[num].second.size()){ int x=i+bomb[num].second[ni].first; int y=j+bomb[num].second[ni].second; if(x<0||x>=N||y<0||y>=N)continue; masu[x][y]--; } } } vectoriru; rep(i,bakuha_zahyo.size()){ if(iranai[i]==0){ iru.push_back(bakuha_zahyo[i]); }else{ bakudan_cnt--; } } bakuha_zahyo=iru; } int nokori_bakudanya_cnt(int i,int j,int num){ //cerr<<__LINE__<<"-----"<B(N); rep(i,N)B[i]=A[i]; //cerr<<__LINE__<<"-----"<=N||y<0||y>=N)continue; //cerr<<"a"; B[x][y]='.'; } int res=0; rep(i,bakudanya.size()){ int x=bakudanya[i].first; int y=bakudanya[i].second; if(B[x][y]=='@')res++; } //cerr<<"nokori"<> ans_yamanobori; input(); cerr<<__LINE__<<"-----"<p=ido(x,y,nx,ny,kind); int ni=p.first; int nj=p.second; //cerr<<__LINE__<<"-----"<0&&now_bakudan_cnt==1){ cerr<<__LINE__<<"-----aru"<p=ido(x,y,bx,by,kind); x=bx;y=by; rep(l,10)ans.push_back(make_pair(2,to_string(kind)));//爆弾を買う now_bakudan_cnt+=10; last_bakudanya=i; break; } } p=ido(x,y,nx,ny,kind); ni=p.first; nj=p.second; mukau(x,y,ni,nj); bakuha_zahyo.emplace_back(ni*N+nj); x=ni;y=nj; bakuha(x,y,kind); ans.push_back(make_pair(3,to_string(kind))); betu_cnt++; now_bakudan_cnt--; }else if(nokori>0&&now_bakudan_cnt>=1){ cerr<<__LINE__<<"-----"< i:ans){ cout<