#题意:给定图像模拟电脑桌面图标移动,给定坐标位置,如果有就删除该图标,然后输出将桌面整理按列排列要多少步,如果没有图标则创建一个新图标再进行移动。
#思路:模拟桌面图标的整理过程将二维的图形转换为按列排列的一维图标再进行模拟操作。
#include<bits/stdc++.h>
using namespace std;
char a[1005][1005],b[1005*1005];
int main()
{
int n,m,t,cnt=0;cin>>n>>m>>t;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>a[i][j];//矩阵中存入图形
if(a[i][j]=='*') cnt++;//记录初始图标个数
b[(j-1)*n+i]=a[i][j];//将二维图形按照列转化成一维便于,模拟
}
int sum=0;
for(int i=cnt+1;i<=n*m;i++) if(b[i]=='*') sum++;//记录最开始整理好要多少步
while(t--){
int x,y,p;cin>>x>>y;
p=(y-1)*n+x;//得到操作的点再一维数组里面的位置
if(b[p]=='*'){//该位置有图标
b[p]='.';//清除图标
if(p>cnt) sum--;
if(p!=cnt&&b[cnt]=='*') sum++;//已经是整理好的位置
cnt--;
}
else{//该位置没有图标
b[p]='*';//创建图标
cnt++;
if(p>cnt) sum++;
if(p!=cnt&&b[cnt]=='*') sum--;//该位置已经已经移动好
}
cout<<sum<<endl;
}
return 0;
}