#include<bits/stdc++.h>
using namespace std;
inline int read()
{
int x=0;
char c=getchar();
while(c<'0'||c>'9')
c=getchar();
while(c>='0'&&c<='9')
{
x=(x<<3)+(x<<1)+(c-'0');
c=getchar();
}
return x;
}
inline void write(int x)
{
if(x>9)
write(x/10);
putchar(x%10+'0');
}
const int N=110;
int n,m,k,T;
int gun1,gun2;
int use[N]={0,0,0,0,0,0,0,0,0,0,50,40,30,20,2,1,5};
int yuan[N]={0,0,0,0,0,0,0,0,0,0,10,11,12,13,14,15,16};
int you[N]={0,3,3,2,1,3,2,2,4,4};
int t[N];
int wu[N]={0,14,14,14,14,15,15,15,16,16};
int num[N];
int x=1,y=1;
int s;
struct node{
int bian;
int zhu,fu;
int num;
bool vis;
};
node d[N][N];
void solve(int cnt)
{
if(d[x][y].vis)
return ;
d[x][y].vis=1;
if(d[x][y].bian<=9)
{
if(you[d[x][y].bian]>you[gun1])
gun1=d[x][y].bian;
else if(you[d[x][y].bian]>you[gun2]&&you[gun1]>you[d[x][y].bian])
gun2=d[x][y].bian;
}
else if(d[x][y].bian<=16)
{
if(s>=use[d[x][y].bian]*d[x][y].num)
{
s-=use[d[x][y].bian]*d[x][y].num;
t[d[x][y].bian]=cnt;
num[d[x][y].bian]+=d[x][y].num;
return ;
}
int e=use[d[x][y].bian]*d[x][y].num-s;
while(e>0)
{
int diu=10;
for(int i=10;i<=16;i++)
{
if(num[i])
{
if(diu==wu[gun1]||diu==wu[gun2]||diu<=13)
{
if(i!=wu[gun1]&&i!=wu[gun2]&&i>=14)
diu=i;
else if(t[i]<t[diu])
diu=i;
}
else
{
if(i!=wu[gun1]&&i!=wu[gun2]&&i>=14&&t[i]<t[diu])
diu=i;
}
}
}
int liang=0;
if(num[diu]*use[diu]<=e)
liang=num[diu];
else
{
liang=e/use[diu];
if(e>liang*use[diu])
liang++;
}
num[diu]-=liang;
e-=liang*use[diu];
}
s=-e;
t[d[x][y].bian]=cnt;
num[d[x][y].bian]+=d[x][y].num;
}
else
{
if(num[wu[gun1]]>=d[x][y].zhu)
num[wu[gun1]]-=d[x][y].zhu;
else if(num[wu[gun2]]>=d[x][y].fu)
num[wu[gun2]]-=d[x][y].fu;
else
{
cout<<x<<" "<<y<<endl;
exit(0);
}
}
}
int main()
{
n=read(),m=read(),k=read(),T=read();
k*=10;
s=k;
for(int i=10;i<=16;i++)
t[i]=INT_MAX;
for(int i=0;i<n*m;i++)
{
int hang=i/n+1,lie=i%n+1;
d[hang][lie].bian=read();
if(d[hang][lie].bian<=16)
d[hang][lie].num=read();
else
d[hang][lie].zhu=read(),d[hang][lie].fu=read();
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<d[i][j].bian<<" ";
}
cout<<endl;
}
short op;
solve(1);
int cnt=1;
while(T--)
{
op=read();
if(op==1)
x--;
else if(op==2)
x++;
else if(op==3)
y--;
else
y++;
solve(++cnt);
}
cout<<gun1<<endl;
cout<<gun2<<endl;
for(int i=10;i<=16;i++)
{
for(int j=i+1;j<=16;j++)
{
if(t[i]>t[j])
{
swap(t[i],t[j]);
swap(num[i],num[j]);
swap(yuan[i],yuan[j]);
}
}
}
for(int i=10;i<=16;i++)
{
if(num[i])
{
cout<<yuan[i]<<" "<<num[i]<<endl;
}
}
return 0;
}
评测记录(0分)