admin 管理员组文章数量: 1184232
Join the Conversation
解决方案:最长公共升子序列的模型,此题的最大问题就是名字的获取问题,没发现名字中间可能有'@',一直没发觉,wa了很多次,TT
code:
#include <iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
char input[2000];
char name[2000];
char mention[2000];
int dp[600000];
int fa[600000];
int path[600000];
map<string,int>Max;
map<string,int >key;
int main()
{
int t;
// freopen("in.txt","r",stdin);
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(~scanf("%d",&t))
{
Max.clear();
key.clear();
getchar();
int MMax=1,en=1;
memset(dp,0,sizeof(dp));
memset(fa,-1,sizeof(fa));
for(int s=1; s<=t; s++)
{
gets(input);
int len=strlen(input);
int i,j=0,u=0;
for(i=1; i<len; i++)
{
if(input[i]==':') break;
name[j++]=input[i];
}
name[j]='\0';
int temp=1;
int n=i+1;
for(n; n<len; n++)
{
if((input[n-1]==' '||n==i+1)&&input[n]=='@')
{
int k;
u=0;
for(k=n+1; input[k]!=' '&&k<len; k++)
{
mention[u++]=input[k];
}
mention[u]='\0';
// cout<<name<<" "<<mention<<endl;
if(strcmp(name,mention)==0)
{
n=k;
continue;
}
else
{
n=k;
if(Max[mention])
{
if(Max[mention]+1>temp)
{
fa[s]=key[mention];
temp=Max[mention]+1;
}
}
}
}
}
dp[s]=temp;
if(Max[name]<temp)
{
Max[name]=temp;
key[name]=s;
}
if(MMax<dp[s])
{
MMax=dp[s];
en=s;
}
}
printf("%d\n",MMax);
int o=0;
path[o++]=en;
while(fa[en]!=-1)
{
path[o++]=fa[en];
en=fa[en];
}
for(int mm=o-1; mm>=0; mm--)
{
printf("%d%c",path[mm],mm==0?'\n':' ');
}
}
return 0;
}
本文标签: Join Conversation
版权声明:本文标题:Join the Conversation 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1754605109a3020414.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论