#include #include std::map setData(); void saiki(int x,int y,int max); int dxs[]={1,0,-1,0}; int dys[]={0,1,0,-1};//部屋の移動 int rooms[501][501];//部屋のデータ int trueLevel[501][501];//その部屋に入れる最低のレベル int w,h; int main(){ int r; std::map sums1;//事務所1で認証レベルuで何部屋目までいけるかの合計 std::map sums2;//同上事務所2 std::map::iterator it1; std::map::iterator it2; scanf("%d",&r); while(r!=0){ sums1.clear(); sums2.clear(); sums1=setData(); /* it1=sums1.begin(); printf("\n"); while(it1!=sums1.end()){ printf("<%d %d>",(*it1).first,(*it1).second); it1++; }*/ sums2=setData(); /*printf("\n"); it2=sums2.begin(); while(it2!=sums2.end()){ printf("<%d %d>",(*it2).first,(*it2).second); it2++; }*/ scanf("%d",&r); } } std::map setData(){ int sx,sy; //部屋のサイズとエレベータ初期位置 scanf("%d %d %d %d",&w,&h,&sx,&sy); sx--;sy--; //部屋データの読み込み for(int i=0;i ninnsyoCount; printf("/trueLevel/\n"); for(int i=0;i::iterator it=ninnsyoCount.begin(); std::map::iterator itLast=ninnsyoCount.end(); itLast--; int t; while(it!=itLast){ t=(*it).second; it++; (*it).second+=t; } return ninnsyoCount; } void saiki(int x,int y,int max){ if(trueLevel[y][x]!=0){ //2度目以降なら1度目よりも低い認証レベルの時のみ if(trueLevel[y][x]<=max) return; } max=rooms[y][x]>max?rooms[y][x]:max; trueLevel[y][x]=max; int nx,ny; for(int i=0;i<4;i++){ nx=x+dxs[i]; ny=y+dys[i]; if(0<=nx && nx