hdu 4099 Revenge of Fibonacci(Trie 트리)
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#define MAX 10
//const int MAX=10;
typedef struct Node{
int isStr;
struct Node *next[MAX];
Node():isStr(-1){
memset(next, NULL, sizeof(next));
}
~Node(){
for(int i = 0;i < MAX; ++i)
if(next[i] != NULL)
delete next[i];
}
}TrieNode,*Trie;
Trie root;
char c[100];
void add(char a[],char b[],char back[]){
int i,j,k;
int x,y,z;
int up;
i=strlen(a)-1;
j=strlen(b)-1;
k=0;
up=0;
while(i>=0||j>=0){
if(i<0)x=0;
else x=a[i]-'0';
if(j<0)y=0;
else y=b[j]-'0';
z=x+y+up;
c[k++]=z%10+'0';
up=z/10;
i--;
j--;
}
if(up>0)c[k++]=up+'0';
for(i=0;i<k;i++)back[i]=c[k-1-i];
back[k]='\0';
}
void Insert(char *s,int index){
TrieNode *p = root;
int num = 0;
while(*s && num < 41){// 40
if(p ->next[*s-'0'] == NULL){
p ->next[*s-'0'] = new TrieNode;
}
p = p ->next[*s-'0'];
if(p->isStr < 0) p->isStr = index;//
s++;
num ++;
}
return ;
}
int find(char *s){
TrieNode *p = root;
int count;
while(*s){
if(p->next[*s - '0'] != NULL){
p = p->next[*s - '0'];
count = p->isStr;
s++;
}
else return -1;
}
return count;
}
char str[3][100];
int main() {
//freopen("f:\\in1.txt","r",stdin);
//freopen("f:\\out1.txt","w",stdout);
int i, Case;
char str1[60];
root = new TrieNode;
str[0][0]='1';
str[0][1]=0;
Insert(str[0],0);
str[1][0]='1';
str[1][1]=0;
Insert(str[1],1);
for(int i=2;i<100000;i++){
int len1=strlen(str[0]);
int len2=strlen(str[1]);
if(len2>60){
str[1][len2-1]=0;
str[0][len1-1]=0;
}
add(str[0],str[1],str[2]);
Insert(str[2],i);
strcpy(str[0],str[1]);
strcpy(str[1],str[2]);
}
scanf("%d",&Case);
for(i = 1; i <= Case; i++){
scanf("%s",str1);
printf("Case #%d: %d
",i,find(str1));
}
delete root;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.