2012-0069

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

签到题..  只要按照题目说明模拟就好,数据范围给得很小             ------kotori
{{{
#include<stdio.h>
#include<map>
#include<set>
#include<string>
#include<iostream>
#include<cstring>
using namespace std;
map<string,int>word;
map<string,int>tips;
map<int,string>lword;
map<int,string>ltips;
set<string>output;
string opt;
char re[256];
int n,m,tot;
bool in[128][10246];
bool pick[10246];
int main()
{ 
  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);
  int i,j,k,ans;
  while(scanf("%d ",&n)!=EOF){
    word.clear();
    tips.clear();
    lword.clear();
    ltips.clear();
    memset(in,0,sizeof(in));
    for(i=1;i<=n;i++){
      gets(re); 
      word[re]=i,lword[i]=re;
      memset(re,0,sizeof(re));
      gets(re);
      for(j=0;re[j];j++){
        opt="";
        while(re[j] && re[j]!=' ')
          opt=opt+re[j++];
        if(tips[opt]==0)
          tips[opt]=++tot,ltips[tot]=opt;
        in[i][tips[opt]]=true;
      }
      memset(re,0,sizeof(re));
    }
    scanf("%d ",&m);
    while(m--){
      gets(re);
      memset(pick,1,sizeof(pick));
      output.clear();
      for(i=0;re[i];i++){
        opt="";
        while(re[i] && re[i]!=' ')
          opt=opt+re[i++];
        k=word[opt];
        for(j=1;j<=tot;j++)
          if(!in[k][j]) 
            pick[j]=false;
      }
      for(i=1;i<=tot;i++)
        if(pick[i])
          output.insert(ltips[i]);
      if(!output.empty()){
        set<string>::iterator it = output.begin();
        cout<<*(it++);
        while(it!=output.end())
          cout<<" "<<*(it++);
        cout<<endl;
      }
      else
        printf("NO\n");
      memset(re,0,sizeof(re));
      fflush(stdout);
    }
  }
  return 0;
}

}}}

签到题.. 只要按照题目说明模拟就好,数据范围给得很小


kotori

#include<stdio.h>
#include<map>
#include<set>
#include<string>
#include<iostream>
#include<cstring>
using namespace std;
map<string,int>word;
map<string,int>tips;
map<int,string>lword;
map<int,string>ltips;
set<string>output;
string opt;
char re[256];
int n,m,tot;
bool in[128][10246];
bool pick[10246];
int main()
{ 
  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);
  int i,j,k,ans;
  while(scanf("%d ",&n)!=EOF){
    word.clear();
    tips.clear();
    lword.clear();
    ltips.clear();
    memset(in,0,sizeof(in));
    for(i=1;i<=n;i++){
      gets(re); 
      word[re]=i,lword[i]=re;
      memset(re,0,sizeof(re));
      gets(re);
      for(j=0;re[j];j++){
        opt="";
        while(re[j] && re[j]!=' ')
          opt=opt+re[j++];
        if(tips[opt]==0)
          tips[opt]=++tot,ltips[tot]=opt;
        in[i][tips[opt]]=true;
      }
      memset(re,0,sizeof(re));
    }
    scanf("%d ",&m);
    while(m--){
      gets(re);
      memset(pick,1,sizeof(pick));
      output.clear();
      for(i=0;re[i];i++){
        opt="";
        while(re[i] && re[i]!=' ')
          opt=opt+re[i++];
        k=word[opt];
        for(j=1;j<=tot;j++)
          if(!in[k][j]) 
            pick[j]=false;
      }
      for(i=1;i<=tot;i++)
        if(pick[i])
          output.insert(ltips[i]);
      if(!output.empty()){
        set<string>::iterator it = output.begin();
        cout<<*(it++);
        while(it!=output.end())
          cout<<" "<<*(it++);
        cout<<endl;
      }
      else
        printf("NO\n");
      memset(re,0,sizeof(re));
      fflush(stdout);
    }
  }
  return 0;
}