//work4.1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{
int weight;
int index;
struct node* lchild;
struct node* rchild;
}huffmanode,*huffmantree;
huffmantree create(int a[],int n)
{
int i,j;
huffmantree *h1,h;
h1=malloc(n*sizeof(huffmanode));
for(i=0;i<n;i++)
{
h1[i]=malloc(sizeof(huffmanode));
h1[i]->weight=a[i];
h1[i]->index=i;
h1[i]->lchild=NULL;
h1[i]->rchild=NULL;
}
for(i=0;i<n-1;++i)
{
int m1=-1,m2;
for(j=0;j<n;++j)
{
if(h1[j]!=NULL&&m1==-1)
{
m1=j;
continue;
}
else if(h1[j]!=NULL)
{
m2=j;
break;
}
}
for(j=m2;j<n;++j)
{
if(h1[j]!=NULL)
{
if(h1[j]->weight<h1[m1]->weight)
{
m2=m1;
m1=j;
}
else if(h1[j]->weight<h1[m2]->weight)
{
m2=j;
}
}
}
h=malloc(sizeof(huffmanode));
h->weight=h1[m1]->weight+h1[m2]->weight;
h->lchild=h1[m1];
h->rchild=h1[m2];
h1[m1]=h;
h1[m2]=NULL;
}
free(h1);
return h;
}
void decode(char str1[],huffmantree h,char str2[])
{
int i;
int num[100];
huffmantree h1=NULL;
for(i=0;i<strlen(str1);++i)
{
if(str1[i]=='0')
{
num[i]=0;
}
else
{
num[i]=1;
}
}
if(h)
{
i=0;
while(i<strlen(str1))
{
h1=h;
while(h1->lchild!=NULL&&h1->rchild!=NULL)
{
if(num[i]==0)
{
h1=h1->lchild;
}
else
{
h1=h1->rchild;
}
i++;
}
printf("%c",str2[h1->index]);
}
}
}
int main()
{
int a[8]={7,19,2,6,32,3,21,10};
char str2[8]={'a','b','c','d','e','f','g','h'};
huffmantree h=NULL;
h=create(a,8);
char str1[100]="\0";
scanf("%s",str1);
decode(str1,h,str2);
}
//work 4.2
#include <stdlib.h>
#include <stdio.h>
void insert(long arr[], long num, int size){
long temp = (num % 10 + size * size) % 10;
if(arr[temp] == 0) {arr[temp] = num;}
else{
if(size == 5) return;
insert(arr, num, size+1);
}
}
void visit(long arr[]){
for(int i=0;i<9;i++){
printf("%ld,", arr[i]);
}
printf("%ld\n", arr[9]);
}
int main(){
long num, arr[10]={0};
while(scanf("%ld,",&num) != EOF){
insert(arr, num, 0);
}
visit(arr);
}
//work 4.3
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#include <ctype.h>
#define maxn 100010
int head[maxn];
int coun=0;
typedef struct LNode{
char name[20];
int road;
int next;
}LNode;
LNode v[maxn];
int HashId(char *str){
int len=strlen(str);
long long sum=0;
for(int i=0;i<len;i++){
if(isdigit(str[i])) sum=sum*10+str[i]-'0';
else sum=sum*10+10;
}
return (int)(sum%100010);
}
void Add(char *str,int index,int m){
int flag=0;
for(int i=head[index];i!=-1;i=v[i].next)
if(strcmp(v[i].name,str)==0){
v[i].road+=m;
flag=1;
}
if(!flag){
strcpy(v[coun].name,str);
v[coun].road=m;
v[coun].next=head[index];
head[index]=coun;
coun++;
}
}
int main(){
int n,k;
scanf("%d %d",&n,&k);
memset(head,-1,sizeof(head));
char str[20]; int m;
while(n--){
getchar();
scanf("%s %d",str,&m);
if(m<k) m=k;
int index=HashId(str);
Add(str,index,m);
}
int num;scanf("%d",&num);
while(num--){
getchar();
scanf("%s",str);
int id=HashId(str);
int t=0;
for(int i=head[id];i!=-1;i=v[i].next){
if(strcmp(v[i].name,str)==0){
printf("%d\n",v[i].road);
t=1;
}
}
if(!t) printf("No Info\n");
}
}