关于下面的程序,蒟蒻有几个问题(
#pragma GCC optimize(2)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
using namespace std;
#define int long long
int n,m,q,cnt,ans,vis[10005][10005];
string s[10005],zd[1000005];
map<string,int>mp;
signed main()
{
cin>>n>>m>>q;
for(int i=0;i<n;i++)
{
cin>>s[i];
zd[cnt++]=s[i];
if(!mp[zd[cnt-1]])
{
mp[zd[cnt-1]]=1;
ans++;
}
}
for(int j=0;j<n;j++)
{
for(int i=0;i<m;i++)
zd[cnt].push_back(s[i][j]);
if(!mp[zd[cnt]])
{
mp[zd[cnt]]=1;
ans++;
}
cnt++;
}
printf("%lld\n",ans);
while(q--)
{
int x,y;
char ch;
cin>>x>>y;
cout<<x<<" "<<y<<endl;
getchar();
cin>>ch;
s[x-1][y-1]=ch;
for(int i=0;i<m;i++)
zd[cnt].push_back(s[x-1][i]);
if(!mp[zd[cnt]])
{
ans++;
mp[zd[cnt]]=1;
}
cnt++;
for(int i=0;i<n;i++)
zd[cnt].push_back(s[i][y-1]);
if(!mp[zd[cnt]])
{
ans++;
mp[zd[cnt]]=1;
}
cnt++;
printf("%lld\n",ans);
}
}
这个代码在做什么并不重要
这个程序在n=3000,m=3000,q=500000时会MLE。
然而这个蒟蒻并不知道这个程序是因为string还是因为map而MLE,所以我就来这里发帖求助了!
谢谢你们!ORZ