比赛 |
国庆欢乐赛3 |
评测结果 |
AAAAAAAAAAAAAAA |
题目名称 |
Following Directions |
最终得分 |
100 |
用户昵称 |
陆晨洗 |
运行时间 |
1.987 s |
代码语言 |
C++ |
内存使用 |
13.47 MiB |
提交时间 |
2025-10-05 10:23:31 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,ans;
int sign[1510][1510]={0};//路标位置与饲料价值
int cow[1510][1510]={0};//经过该位置的奶牛数量
void cx(int x,int y)//求每个位置的奶牛数量
{
int i,j;
if(x>n||y>n)
{
return;
}
cow[x][y]++;
if(sign[x][y]==1)
{
cow[x][y+1]=cow[x][y+1]+cow[x][y];
}
else
{
cow[x+1][y]=cow[x+1][y]+cow[x][y];
}
return;
}
int js()//求花费成本
{
int i;
ans=0;
for(i=1;i<=n;i++)
{
ans=ans+sign[n+1][i]*cow[n+1][i];
ans=ans+sign[i][n+1]*cow[i][n+1];
}
return ans;
}
void xg(int x,int y,int z)//更改奶牛数量
{
int i,j;
if(x>n||y>n)
{
return;
}
if(sign[x][y]==1)
{
cow[x][y+1]=cow[x][y+1]+z;
xg(x,y+1,z);
}
else
{
cow[x+1][y]=cow[x+1][y]+z;
xg(x+1,y,z);
}
return;
}
int main()
{
freopen("zunxun.in","r",stdin);
freopen("zunxun.out","w",stdout);
int q,x,y,i,j;
char c;
cin>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cin>>c;
if(c=='R')
{
sign[i][j]=1;
}
else
{
sign[i][j]=2;
}
}
cin>>sign[i][n+1];
}
for(i=1;i<=n;i++)
{
cin>>sign[n+1][i];
}//61-81行:基本输入
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cx(i,j);//初始化
}
}
cout<<js()<<endl;//输出答案
cin>>q;
for(i=1;i<=q;i++)
{
cin>>x>>y;
if(sign[x][y]==1)
{
cow[x][y+1]=cow[x][y+1]-cow[x][y];
xg(x,y+1,-1*cow[x][y]);
sign[x][y]=2;
}
else
{
cow[x+1][y]=cow[x+1][y]-cow[x][y];
xg(x+1,y,-1*cow[x][y]);
sign[x][y]=1;
}//94-105行:改变路标方向
xg(x,y,cow[x][y]);
cout<<js()<<endl;//输出答案
}
}