1.2 Name That Number
                                            
 3316 단어  USACO사전 문 제 를 찾다.
                    
사전 에 포 함 된 단어의 수가 많 지 않 기 때문에 우 리 는 먼저 단 어 를 메모리 에 읽 은 후에 일일이 비교 할 수 있다.그러나 이런 방법 은 가장 좋 은 것 이 아 닐 것 이다. 만약 에 단어의 개수 가 많 으 면 시간 이 많이 걸 릴 것 이다. 이런 방법 은 반드시 사전에 있 는 모든 단 어 를 한 번 씩 비교 해 야 한다.
해시 로 찾 는 방법 을 생각하면 숫자 를 키워드 key, f = key% 5000 을 해시 함수 로 하여 배열 arr [5000] 을 정의 하고 키 워드 를 key 로 하 는 단 어 를 모두 arr [f] 를 중심 으로 하 는 링크 에 저장 할 수 있 습 니 다. 그러면 매번 조회 할 때마다 key% 5000 으로 주 소 를 정 하여 조회 시간 을 크게 줄 일 수 있 습 니 다.오랫동안 썼 다가 마침내 통과 하 였 다.
/*
ID: whutzha1  
PROG: namenum  
LANG: C++  
*/
#include<fstream>
using namespace std;
ifstream cin("namenum.in");
ifstream fin("dict.txt");
ofstream cout("namenum.out");
struct Node
{
  char name[13];
  long long num;
  Node *next;
};
int main()
{
   Node *arr[5000];
   int i;
   for (i=0;i<5000;i++)
   {
     arr[i]=NULL;
   }
   // dict.txt  
   char read_name[13];
   long long read_num;
   int   area;
   int   n;
   char ch;
   while(fin.get(ch))
   {
   for (i=0;i<13;i++)
   {
     while(ch==' '||ch=='
')
        { fin.get(ch); }
     read_name[i]=ch;
     fin.get(ch);
     if (ch==' '||ch=='
')
         break;    
   }
   read_name[i+1]='\0';
   read_num=0;
   for(i=0;i<12;i++)
   {
	 switch(read_name[i])
	 {
	    case 'A':
	    case 'B':
	    case 'C':  n=2;break;
	    case 'D':
		case 'E':
		case 'F':  n=3;break;
		case 'G':
		case 'H':
		case 'I':  n=4;break;
		case 'J':
		case 'K':
		case 'L':  n=5;break;
		case 'M':
		case 'N':
		case 'O':  n=6;break;
		case 'P':
		case 'R':
		case 'S':  n=7;break;
		case 'T':
        case 'U':
		case 'V':  n=8;break;
		case 'W':
		case 'X':
		case 'Y':  n=9;break;
		default: break;
	 }
     read_num=(read_num*10+n);
	 if (i==11||read_name[i+1]=='\0') 
	 {
         area=read_num%5000;
         Node *p=(Node *)malloc(sizeof(Node));
		 if (arr[area]==NULL)  
		 {
		   arr[area]=p;
		 }
		 else 
		 {
		   Node *q=arr[area];
		   Node *r;
		   while (q)
		   {
			 r=q;
		     q=q->next;
		   }
		   r->next=p;
		 }
		 p->num=read_num;
		 p->next=NULL;
		 for (i=0;i<13;i++)
		 {
		   p->name[i]=read_name[i];
		   if (p->name[i]=='\0')
		   {
		      break;
		   }
		}
		 break;
	 }
   }  
   }//while 
   long long num;
   bool flag;
   cin>>num;
   Node *p;
   p=arr[num%5000];
   flag=false;
   while(p)
   {
	  if (p->num==num)
	  {
		 flag=true;
	    // for(i=0;i<12;i++)
		// {
		//   cout<<p->name[i];
		//   if (p->name[i+1]=='\0')
		//   {cout<<endl;break;} 
		// }
		cout<<p->name<<endl;
	  }
	  p=p->next;
   }
   if (!flag)  {cout<<"NONE"<<endl;}
   return 0;
}이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[USACO] 2021 December - BronzeN\le500,000 O(N \log N) O(N^2) O(N2)이라 포기. O(N) O(N) 풀이다. O(N^2) O(N2) 아닌가? O(N) O(N). O(NT) N \le 100,000 O(NT) O(N) O(...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.