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에 따라 라이센스가 부여됩니다.