社区讨论

阅 读 程 序 题

学术版参与者 5已保存回复 9

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
9 条
当前快照
1 份
快照标识符
@lod3rkoc
此快照首次捕获于
2023/10/31 00:16
2 年前
此快照最后确认于
2023/11/05 10:34
2 年前
查看原帖
关于下面的程序,蒟蒻有几个问题(
CPP
#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=3000n=3000m=3000m=3000,q=500000q=500000时会MLE。
然而这个蒟蒻并不知道这个程序是因为string还是因为map而MLE,所以我就来这里发帖求助了!
谢谢你们!ORZ

回复

9 条回复,欢迎继续交流。

正在加载回复...