比赛 |
国庆欢乐赛3 |
评测结果 |
AWWWWWWTTTTTTTT |
题目名称 |
Following Directions |
最终得分 |
7 |
用户昵称 |
梦那边的美好ME |
运行时间 |
20.219 s |
代码语言 |
C++ |
内存使用 |
23.91 MiB |
提交时间 |
2025-10-05 10:25:22 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll n,c,mp[1600][1600],vis[1600][1600];
char s[1600];
ll Q;
ll ans;
ll row[1600],lin[1600];
int main(){
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
freopen("zunxun.in","r",stdin);
freopen("zunxun.out","w",stdout);
cin>>n;
for (int i=0;i<n;i++){
cin>>s>>c;
mp[i][n]=c;
for (int j=0;j<n;j++){
if (s[j]=='R') mp[i][j]=1;
else mp[i][j]=0;
}
}
for (int i=0;i<n;i++){
cin>>mp[n][i];
}
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
if (vis[i][j]!=0) continue;
vis[i][j]=1;
int x=i,y=j;
while (x!=n&&y!=n){
if (mp[x][y]){
y++;
vis[x][y]=vis[x][y-1]+1;
}
else{
x++;
vis[x][y]=vis[x-1][y]+1;
}
}
ans+=(vis[x][y]-1)*mp[x][y];
}
}
printf("%lld\n",ans);
scanf("%d",&Q);
while (Q--){
int a,b,x,y;
scanf("%d %d",&a,&b);a--;b--;
x=a;y=b;
while (x!=n&y!=n){
if (mp[x][y]){
y++;
vis[x][y]--;
}else{
x++;
vis[x][y]--;
}
}
ans-=vis[a][b]*mp[x][y];
if (mp[a][b]) mp[a][b]=0;
else mp[a][b]=1;
x=a;y=b;
while (x!=n&y!=n){
if (mp[x][y]){
y++;
vis[x][y]++;
}else{
x++;
vis[x][y]++;
}
}
ans+=vis[a][b]*mp[x][y];
printf("%lld\n",ans);
}
return 0;
}