列表

详情


NC25878. 表单

描述

子弹上膛的声音,是我唱歌的先兆。
                                                 ——百里守约-朱雀志

小T有一张一共有n个字符串的字符串表,因为小T是神所以他可以任意修改这张表,

因为小T是个强迫症,所以他想方设法的使这些字符不同,

所以现在他进行以下操作Q次:

(1):给字符串表中加入一个字符串s

(2):给字符串表去重,输出去掉字符串的数量。

由于出题人用win10配的数据,所以读入中会有空行出现,请忽略他们,避免应为这个而WA

注:本系列题不按难度排序哦

输入描述

第一行两个整数n,Q

后n行每行一个字符串

后Q行每行代表一个操作:

一操作:1 s

二操作:2

输出描述

对于每个二操作,进行回答。

示例1

输入:

4 4
play
the
pubg
game
1 game
1 pubg
2
2

输出:

2
0

说明:



100 \%\ 1 \le n,Q \le 5 \times 10^5

对于所有输入的字符串长度<=40

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 446ms, 内存消耗: 15180K, 提交时间: 2019-06-14 20:30:40

#include<bits/stdc++.h>
using namespace std;
map<string,int>m;

int main()
{
	int n,q,ans=0,x;
	scanf("%d%d",&n,&q);
	string s;
	for(int i=1;i<=n;i++){
		cin>>s;
		if(m[s]) ans++;
		m[s]=1;
	}
	while(q--){
		scanf("%d",&x);
		if(x==1) {
			cin>>s;
		    if(m[s]) ans++;
		    m[s]=1;
		}
		else{
			printf("%d\n",ans);
			ans=0;
		}
	}
}

C++(clang++ 11.0.1) 解法, 执行用时: 361ms, 内存消耗: 15136K, 提交时间: 2022-11-21 20:41:02

#include<bits/stdc++.h> 
using namespace std; 
map<string,int>m;
int main() {
int n,q,ans=0,x; scanf("%d%d",&n,&q);

string s;
for(int i=1;i<=n;i++){
cin>>s; if(m[s]) ans++; m[s]=1;
} while(q--){
scanf("%d",&x); if(x==1) {
cin>>s; if(m[s]) ans++; m[s]=1;
} else{
printf("%d\n",ans);
ans=0; }
} }

上一题