| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
确实,太烦人了,附代妈&512题纪念In Reply To:Re:一定注意输入只有一个字符的情况,因为这个跪了三次 Posted by:RiseFalcon at 2016-10-16 07:42:56 #include <iostream>
#include <cstring>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <queue>
#include <algorithm>
using namespace std;
struct node{
node *left;
node *right;
char c;
int freq;
}nodes[233];
struct nodep{
node* p;
nodep(node* p):p(p){}
};
bool cmp(node *n1, node *n2){
return n1->freq > n2->freq;
}
bool operator<(const nodep& n1, const nodep& n2){
return cmp(n1.p, n2.p);
}
void collect(node* root, int* col, int depth){
//cout << "depth: " << depth << endl;
if(root->left == NULL && root->right == NULL){
//cout << depth << " " << root->freq << endl;
*col += depth * root->freq;
return;
}
collect(root->left, col, depth+1);
collect(root->right, col, depth+1);
}
void ent(string s){
int l = s.length();
bool used[233] = {0};
for(int i = 0; i < l; i++){
int idx = (int)s[i];
if(!used[idx]){
used[idx] = 1;
nodes[idx].c = s[i];
nodes[idx].freq = 1;
nodes[idx].left = NULL;
nodes[idx].right = NULL;
}
else{
nodes[idx].freq++;
}
}
priority_queue<nodep> pq;
for(char c = 'A'; c <= '_'; c++){
if(used[(int)c]) pq.push(nodep(&nodes[(int)c]));
}
if(pq.size() == 1){
printf("%d %d 8.0\n", 8*l, l);
return;
}
//printf("pqsize: %d\n", pq.size());
while(pq.size() > 1){
node* n1 = pq.top().p;
pq.pop();
node* n2 = pq.top().p;
pq.pop();
node* t = new node();
t->left = n1, t->right = n2, t->freq = n1->freq+n2->freq;
pq.push(nodep(t));
}
node *root = pq.top().p;
int col = 0;
collect(root, &col, 0);
printf("%d %d %.1lf\n", 8*l, col, 8.0*l/col);
}
int main() {
while(1){
string s;
while(s.length()==0) getline(cin, s);
if(strcmp(s.c_str(), "END")==0) break;
ent(s);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator