显示代码纯文本
- #include<bits/stdc++.h>
- using namespace std;
- int n,q,value;
- int f[1510][1510],r[1510],d[1510],a[1510][1510];
- void prework(){
- for(int i=1;i<=n;i++){
- for(int j=1;j<=n;j++){
- a[i][j]++;
- if(f[i][j]==1){
- a[i][j+1]+=a[i][j];
- }
- else{
- a[i+1][j]+=a[i][j];
- }
- }
- }
- }
- void calc(){
- int ans=0;
- for(int i=1;i<=n;i++){
- ans+=a[i][n+1]*r[i]+a[n+1][i]*d[i];
- }
- cout<<ans<<endl;
- }
- void work(bool flag,int x,int y){
- if(flag==true){
- a[x][y]-=value;
- }
- if(x==n&&f[x][y]==0){
- a[x+1][y]-=value;
- }
- else{
- if(y==n&&f[x][y]==1){
- a[x][y+1]-=value;
- }
- else{
- if(f[x][y]==0){
- work(true,x+1,y);
- }
- else{
- work(true,x,y+1);
- }
- }
- }
- }
- int main(){
- freopen("zunxun.in","r",stdin);
- freopen("zunxun.out","w",stdout);
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- cin>>n;
- char c;
- for(int i=1;i<=n;i++){
- for(int j=1;j<=n;j++){
- cin>>c;
- if(c=='R'){
- f[i][j]=1;
- }
- else{
- f[i][j]=0;
- }
- }
- cin>>r[i];
- }
- for(int i=1;i<=n;i++){
- cin>>d[i];
- }
- prework();
- calc();
- cin>>q;
- int x,y;
- for(int i=1;i<=q;i++){
- cin>>x>>y;
- value=a[x][y];
- work(false,x,y);
- f[x][y]=!f[x][y];
- value=-a[x][y];
- work(false,x,y);
- calc();
- }
- return 0;
- }