Re: 10062 - Tell Me the Frequencies!
Posted: Sat Jun 30, 2012 12:21 am
Don't print a blank line at the end of the output.
Code: Select all
67 1
66 2
65 3
49 1
50 2
51 3
Code: Select all
67 1
66 2
65 3
49 1
50 2
51 3
Code: Select all
import java.io.*;
import java.util.*;
class Main {
private static final char NEW_LINE = '\n';
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
int intchr;
try {
Map<Integer, Entry> map = new HashMap<Integer, Entry>();
while ((intchr = reader.read()) != -1) {
if (intchr == NEW_LINE || intchr == '\r') {
if (map.isEmpty()) {
continue;
}
printResult(writer, map, true);
writer.write("\n");
map = new HashMap<Integer, Entry>();
continue;
}
Entry integer = map.get(intchr);
if (integer == null) {
integer = new Entry(intchr);
map.put(intchr, integer);
}
integer.frequency++;
}
printResult(writer, map, false);
writer.flush();
} catch (IOException e) {
}
}
private static void printResult(BufferedWriter writer, Map<Integer, Entry> map, boolean printLastN) throws IOException {
Entry[] values = map.values().toArray(new Entry[map.size()]);
Arrays.sort(values, new Comparator<Entry>() {
public int compare(Entry o1, Entry o2) {
int compare = o1.compareTo(o2);
if (compare == 0) {
return o2.value - o1.value;
}
return compare;
}
});
for (int i = 0; i < values.length; i++) {
Entry value = values[i];
writer.write(String.valueOf(value.value));
writer.write(" ");
writer.write(String.valueOf(value.frequency));
if (i + 1 == values.length && !printLastN) {
continue;
}
writer.write("\n");
}
}
static class Entry implements Comparable<Entry> {
int frequency;
final int value;
Entry(int value) {
this.value = value;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Entry entry = (Entry) o;
if (value != entry.value) return false;
return true;
}
@Override
public int hashCode() {
return value;
}
public int compareTo(Entry o) {
return frequency - o.frequency;
}
}
}
Code: Select all
#include<stdio.h>
#include<string.h>
#define MAXLEN 1001
#define ASCIISTART 32
#define ASCIIEND 128
int frequency_table[ASCIIEND+1];
int output_table[101];
void init_frequensy()
{
int i=0;
for(i=ASCIISTART;i<ASCIIEND-1;i++)
{
frequency_table[i]=0;
}
}
int make_output()
{
int i=0,j=0,size=0,temp=0;;
for(i=ASCIISTART;i<ASCIIEND;i++)
{
if(frequency_table[i]==0)
continue;
output_table[j++]=i;
}
size=j;
for(i=0;i<size-1;i++)
{
for(j=i+1;j<size;j++)
{
if(frequency_table[output_table[i]]>frequency_table[output_table[j]])
{
temp=output_table[i];
output_table[i]=output_table[j];
output_table[j]=temp;
}
else if(frequency_table[output_table[i]]==frequency_table[output_table[j]])
{
if(output_table[i]<output_table[j])
{
temp=output_table[i];
output_table[i]=output_table[j];
output_table[j]=temp;
}
}
}
}
return size;
}
int main()
{
char str[MAXLEN];
int size=0;
/*freopen("c:/10062_in.txt","r",stdin);
freopen("c:/10062_out.txt","w",stdout);*/
while(gets(str)!=NULL)
{
int i=0;
if(strlen(str)>1000)
continue;
if(size!=0)
printf("\n");
init_frequensy();
for(i=0;i<strlen(str);i++)
{
//if(str[i]>=ASCIISTART && str[i]<ASCIIEND)
frequency_table[str[i]]++;
}
size=make_output();
for(i=0;i<size;i++)
{
printf("%d %d\n",output_table[i],frequency_table[output_table[i]]);
}
}
return 0;
}
Code: Select all
AAABBC
122333
Code: Select all
67 1
66 2
65 3
49 1
50 2
51 3