ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF858D Polycarp's phone book

2021-07-13 08:33:06  阅读:187  来源: 互联网

标签:iterator Polycarp CF858D int book key rec id size


题意翻译

有 n 个长度为 9 且只包含数字字符互不相同的串。

需要对于每个串找到一个长度最短的识别码,使得这个识别码当且仅当为这个串的子串。

题目分析

因为范围不是非常大,所以可以将子串筛出来

然后用STL统计即可

#include<bits/stdc++.h>
using namespace std;
int n;
string s[70005];
map<string,vector<int> >rec;
map<string,int >vis;
vector<string>cklfuck[70005];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		cin>>s[i];
		vis.clear();
		for(int j=0;j<s[i].size();j++)
		{
			string ckl;
			for(int k=j;k<s[i].size();k++)
			{
				ckl+=s[i][k];
				if(!vis[ckl])
				{
					vis[ckl]=1;
					rec[ckl].push_back(i);
				}
				
			}
			
		}
	}
	for(map<string,vector<int> >::iterator it=rec.begin();it!=rec.end();it++)
	{
		pair<string,vector<int> >pi=(*it);
		vector<int>saeds=pi.second;
		if(saeds.size()==1)
		{
			string sf=(*it).first;
			vector<int>::iterator id=saeds.begin();
			int key=*id;
			cklfuck[key].push_back(sf);
		}
	}
	for(int i=1;i<=n;i++)
	{
		int mini=0x3f3f3f3f;
		int keyi;
		for(int j=0;j<cklfuck[i].size();j++)
		{
			string cjg=cklfuck[i][j];
			if(mini>cjg.size())
			{
				mini=cjg.size();
				keyi=j;	
			}	
//			cout<<cklfuck[i][j];
//			printf("\n");
		}		
		cout<<cklfuck[i][keyi];
		printf("\n");
	}
}

标签:iterator,Polycarp,CF858D,int,book,key,rec,id,size
来源: https://www.cnblogs.com/kid-magic/p/15004805.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有