您的位置:首页 > 其它

动物统计加强版(贪心,字典序)

2015-11-28 14:18 204 查看

动物统计加强版

时间限制:3000 ms | 内存限制:150000 KB
难度:4

描述在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单。科学家想判断这片森林中哪种动物的数量最多,但是由于数据太过庞大,科学家终于忍受不了,想请聪明如你的ACMer来帮忙。

输入第一行输入动物名字的数量N(1<= N <= 4000000),接下来的N行输入N个字符串表示动物的名字(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数据)。 输出输出这些动物中最多的动物的名字与数量,并用空格隔开(数据保证最多的动物不会出现两种以上)。 样例输入
10
boar
pig
sheep
gazelle
sheep
sheep
alpaca
alpaca
marmot
mole

样例输出
sheep 3


题解:贪心ac,字典树me,map超时;

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
typedef long long LL;
#define mem(x,y) memset(x,y,sizeof(x))
#define T_T while(T--)
#define F(i,x) for(i=0;i<x;i++)
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
const int MAXN=4000010;
struct Node{
char s[12];
int num;
friend bool operator < (Node const &a,Node const &b){
if(strcmp(a.s,b.s)<0)return true;
return false;
}
}dt[MAXN];
int main(){
int N;
int i,j;
SI(N);
mem(dt,0);
F(i,N){
scanf("%s",dt[i].s);
dt[i].num=1;
}
sort(dt,dt+N);
int ans=0;
int ms=0;
for(i=1;i<N;i++){
if(strcmp(dt[i].s,dt[i-1].s)==0)dt[i].num=dt[i-1].num+1;
if(dt[i].num>ms){
ms=dt[i].num;
ans=i;
}
}
printf("%s %d\n",dt[ans].s,ms);
return 0;
}


  

map超时

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
typedef long long LL;
#define mem(x,y) memset(x,y,sizeof(x))
#define T_T while(T--)
#define F(i,x) for(i=0;i<x;i++)
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
map<string,int>mp;
int main(){
int N;
char s[15],t[15];
SI(N);
int i;
mp.clear();
F(i,N){
scanf("%s",s);
mp[s]++;
}
map<string,int>::iterator iter;
int ms=0;
for(iter=mp.begin();iter!=mp.end();iter++){
if(iter->second>ms){
ms=iter->second;strcpy(t,iter->first.c_str());
}
}
printf("%s %d\n",t,ms);
return 0;
}


  字典树me

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
typedef long long LL;
#define mem(x,y) memset(x,y,sizeof(x))
#define T_T while(T--)
#define F(i,x) for(i=0;i<x;i++)
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
const int MAXN=4000010;
int word[MAXN],ch[MAXN][26],val[MAXN];//ch[MAXN][26]里的MAXN还没开够应该开到MAXN*12,数据量太大了
//肯定me了
char ans[12];
int sz,mm;
void join(char *s){
int len=strlen(s),k=0;
for(int i=0;i<len;i++){
int j=s[i]-'a';
if(!ch[k][j]){
mem(ch[sz],0);
ch[k][j]=sz++;
}
k=ch[k][j];
word[k]++;
}
if(word[k]>mm){
mm=word[k];
memcpy(ans,s,sizeof(s));
}
}
int find(char *s){
int i,j,len=strlen(s),k=0;
F(i,len){
j=s[i]-'a';
k=ch[k][j];

}
return word[k];
}
int main(){
int N;
int i,j;
sz=0;
SI(N);
mm=0;
char s[12];
F(i,N){
scanf("%s",s);
join(s);
}
printf("%s %d\n",ans,mm);
return 0;
}


  

自己写了一发链表ac了;

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
struct Node{
int num;
Node *next[30];
};
Node *root;
char ans[12],s[12];
int mm;
void insert(char *s){
Node *p=root,*q;
for(int i=0;s[i];i++){
int j=s[i]-'a';
if(p->next[j]==NULL){
q=(Node *)malloc(sizeof(Node));
q->num=0;
for(int k=0;k<30;k++)q->next[k]=NULL;
p->next[j]=q;
}
p=p->next[j];
}
if(++p->num>mm){
mm=p->num;
memcpy(ans,s,sizeof(s));
}
}
void freeroot(Node *r){
for(int i=0;i<30;i++){
if(r->next[i]!=NULL){
freeroot(r->next[i]);
free(r->next[i]);
}
else free(r->next[i]);
}
}
void initial(){
root=(Node *)malloc(sizeof(Node));
root->num=0;
for(int i=0;i<30;i++)root->next[i]=NULL;
}
int main(){
int N;
scanf("%d",&N);
initial();
mm=0;
while(N--){
scanf("%s",s);
insert(s);
}
printf("%s %d\n",ans,mm);
freeroot(root);//不加也可以为了优化内存,加了反而时间长一些;
return 0;
}


  

大神的链表;

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stack>
#include<iostream>
#include<algorithm>
#define fab(a) (a)>0?(a):(-a)
#define LL long long
#define MAXN 10010
#define mem(x) memset(x,0,sizeof(x))
#define INF 0xfffffff
using namespace std;
struct s
{
int num;
s *next[26];
};
s *root;
int ans=0;
char sa[12];
void create(char *str)
{
int len=strlen(str);
s *p=root,*q;
for(int i=0;i<len;i++)
{
int id=str[i]-'a';
if(p->next[id]==NULL)
{
q=(s *)malloc(sizeof(s));
for(int j=0;j<26;j++)
q->next[j]=NULL;
q->num=0;
p->next[id]=q;
p=p->next[id];
}
else
{
//if(i==len-1)
p=p->next[id];
}
}
if(ans<++p->num)
{
strcpy(sa,str);
ans=p->num;
}

}
void begin()
{
for(int i=0;i<26;i++)
root->next[i]=NULL,root->num=0;
}
void freetree(s *t)
{
if(t==NULL)
return;
for(int i=0;i<26;i++)
{
if(t->next[i]!=NULL)
freetree(t->next[i]);
}
free(t);
return;
}
int main()
{

int t,i,n;
char ss[12];
int bz=0;
root=(s *)malloc(sizeof(s));
begin();
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",ss);
create(ss);
}
printf("%s %d\n",sa,ans);
freetree(root);
return 0;
}


  过段时间又写了下,一遍A,感觉比以前写的要简单些了;

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace  std;
typedef long long LL;
#define mem(x,y) memset(x,y,sizeof(x))
#define SI(x) scanf("%d",&x)
#define PI(x) printf("%d",x)
#define P_ printf(" ")
const int INF=0x3f3f3f3f;
const int MAXN=4000010;//要开的足够大
char ans[15];
int cur;
struct Node{
int num;
Node* next[30];
Node init(){
for(int i=0;i<30;i++)next[i]=NULL;
num=0;
}
};
Node head;
void insert(char *s){
int j;
Node *p=&head,*q;
for(int i=0;s[i];i++){
j=s[i]-'a';
if(p->next[j]==NULL){
q=(Node *)malloc(sizeof(Node));
q->init();
p->next[j]=q;
}
p=p->next[j];
}
p->num++;
if(p->num>cur){
strcpy(ans,s);cur=p->num;
}
}
int main(){
int N;
char s[15];
while(~scanf("%d",&N)){
head.init();
cur=0;
for(int i=0;i<N;i++){
scanf("%s",s);
insert(s);
}
printf("%s %d\n",ans,cur);
}
return 0;
}


人之初,性本善。性相近,习相远。

苟不教,性乃迁。教之道,贵以专。
昔孟母,择邻处。子不学,断机杼。
窦燕山,有义方。教五子,名俱扬。
养不教,父之过。教不严,师之惰。
子不学,非所宜。幼不学,老何为。
玉不琢,不成器。人不学,不知义。
为人子,方少时。亲师友,习礼仪。
香九龄,能温席。孝于亲,所当执。
融四岁,能让梨。弟于长,宜先知。
首孝悌,次见闻。知某数,识某文。
一而十,十而百。百而千,千而万。
三才者,天地人。三光者,日月星。
三纲者,君臣义。父子亲,夫妇顺。
曰春夏,曰秋冬。此四时,运不穷。
曰南北,曰西东。此四方,应乎中。
曰水火,木金土。此五行,本乎数。
曰仁义,礼智信。此五常,不容紊。
稻粱菽,麦黍稷。此六谷,人所食。
马牛羊,鸡犬豕。此六畜,人所饲。
曰喜怒,曰哀惧。爱恶欲,七情具。
青赤黄,及黑白。此五色,目所识。
酸苦甘,及辛咸。此五味,口所含。
膻焦香,及腥朽。此五臭,鼻所嗅。
匏土革,木石金。丝与竹,乃八音。
曰平上,曰去入。此四声,宜调协。
高曾祖,父而身。身而子,子而孙。
自子孙,至玄曾。乃九族,人之伦。
父子恩,夫妇从。兄则友,弟则恭。
长幼序,友与朋。君则敬,臣则忠。
此十义,人所同。当师叙,勿违背。
斩齐衰,大小功。至缌麻,五服终。
礼乐射,御书数。古六艺,今不具。
惟书学,人共遵。既识字,讲说文。
有古文,大小篆。隶草继,不可乱。
若广学,惧其繁。但略说,能知原。
凡训蒙,须讲究。详训诂,明句读。
为学者,必有初。小学终,至四书。
论语者,二十篇。群弟子,记善言。
孟子者,七篇止。讲道德,说仁义。
作中庸,子思笔。中不偏,庸不易。
作大学,乃曾子。自修齐,至平治。
孝经通,四书熟。如六经,始可读。
诗书易,礼春秋。号六经,当讲求。
有连山,有归藏。有周易,三易详。
有典谟,有训诰。有誓命,书之奥。
我周公,作周礼。著六官,存治体。
大小戴,注礼记。述圣言,礼乐备。
曰国风,曰雅颂。号四诗,当讽咏。
诗既亡,春秋作。寓褒贬,别善恶。
三传者,有公羊。有左氏,有谷梁。
经既明,方读子。撮其要,记其事。
五子者,有荀扬。文中子,及老庄。
经子通,读诸史。考世系,知始终。
自羲农,至黄帝。号三皇,居上世。
唐有虞,号二帝。相揖逊,称盛世。
夏有禹,商有汤。周武王,称三王。
夏传子,家天下。四百载,迁夏社。
汤伐夏,国号商。六百载,至纣亡。
周武王,始诛纣。八百载,最长久。
周辙东,王纲坠。逞干戈,尚游说。
始春秋,终战国。五霸强,七雄出。
嬴秦氏,始兼并。传二世,楚汉争。
高祖兴,汉业建。至孝平,王莽篡。
光武兴,为东汉。四百年,终于献。
魏蜀吴,争汉鼎。号三国,迄两晋。
宋齐继,梁陈承。为南朝,都金陵。
北元魏,分东西。宇文周,与高齐。
迨至隋,一土宇。不再传,失统绪。
唐高祖,起义师。除隋乱,创国基。
二十传,三百载。梁灭之,国乃改。
梁唐晋,及汉周。称五代,皆有由。
炎宋兴,受周禅。十八传,南北混。
辽与金,皆称帝。元灭金,绝宋世。
舆图广,超前代。九十年,国祚废。
太祖兴,国大明。号洪武,都金陵。
迨成祖,迁燕京。十六世,至崇祯。
权阉肆,寇如林。李闯出,神器焚。
清世祖,膺景命。靖四方,克大定。
由康雍,历乾嘉。民安富,治绩夸。
道咸间,变乱起。始英法,扰都鄙。
同光后,宣统弱。传九帝,满清殁。
革命兴,废帝制。立宪法,建民国。
古今史,全在兹。载治乱,知兴衰。
史虽繁,读有次。史记一,汉书二。
后汉三,国志四。兼证经,参通鉴。
读史者,考实录。通古今,若亲目。
昔仲尼,师项橐。古圣贤,尚勤学。
赵中令,读鲁论。彼既仕,学且勤。
披蒲编,削竹简。彼无书,且知勉。
头悬梁,锥刺股。彼不教,自勤苦。
如囊萤,如映雪。家虽贫,学不辍。
如负薪,如挂角。身虽劳,犹苦卓。
苏老泉,二十七。始发愤,读书籍。
彼既老,犹悔迟。尔小生,宜早思。
若梁灏,八十二。对大廷,魁多士。
彼既成,众称异。尔小生,宜立志。
莹八岁,能咏诗。泌七岁,能赋棋。
彼颖悟,人称奇。尔幼学,当效之。
蔡文姬,能辩琴。谢道韫,能咏吟。
彼女子,且聪敏。尔男子,当自警。
唐刘晏,方七岁。举神童,作正字。
口而诵,心而惟。朝于斯,夕于斯。
晏虽幼,身已仕。有为者,亦若是。
犬守夜,鸡司晨。苟不学,曷为人。
蚕吐丝,蜂酿蜜。人不学,不如物。
幼而学,壮而行。上致君,下泽民。
扬名声,显父母。光于前,裕于后。
人遗子,金满赢。我教子,唯一经。
勤有功,戏无益。戒之哉,宜勉力。

  弟子规

  总 叙

  弟子规 圣人训 首孝弟 次谨信

  泛爱众 而亲仁 有余力 则学文

  入 则 孝

  父母呼 应勿缓 父母命 行勿懒

  父母教 须敬听 父母责 须顺承

  冬则温 夏则凊 晨则省 昏则定

  出必告 反必面 居有常 业无变

  事虽小 勿擅为 苟擅为 子道亏

  物虽小 勿私藏 苟私藏 亲心伤

  亲所好 力为具 亲所恶 谨为去

  身有伤 贻亲忧 德有伤 贻亲羞

  亲爱我 孝何难 亲憎我 孝方贤

  亲有过 谏使更 怡吾色 柔吾声

  谏不入 悦复谏 号泣随 挞无怨

  亲有疾 药先尝 昼夜侍 不离床

  丧三年 常悲咽 居处变 酒肉绝

  丧尽礼 祭尽诚 事死者 如事生

  出 则 弟

  兄道友 弟道恭 兄弟睦 孝在中

  财物轻 怨何生 言语忍 忿自泯

  或饮食 或坐走 长者先 幼者后

  长呼人 即代叫 人不在 己即到

  称尊长 勿呼名 对尊长 勿见能

  路遇长 疾趋揖 长无言 退恭立

  骑下马 乘下车 过犹待 百步余

  长者立 幼勿坐 长者坐 命乃坐

  尊长前 声要低 低不闻 却非宜

  进必趋 退必迟 问起对 视勿移

  事诸父 如事父 事诸兄 如事兄

  谨

  朝起早 夜眠迟 老易至 惜此时

  晨必盥 兼漱口 便溺回 辄净手

  冠必正 纽必结 袜与履 俱紧切

  置冠服 有定位 勿乱顿 致污秽

  衣贵洁 不贵华 上循分 下称家

  对饮食 勿拣择 食适可 勿过则

  年方少 勿饮酒 饮酒醉 最为丑

  步从容 立端正 揖深圆 拜恭敬

  勿践阈 勿跛倚 勿箕踞 勿摇髀

  缓揭帘 勿有声 宽转弯 勿触棱

  执虚器 如执盈 入虚室 如有人

  事勿忙 忙多错 勿畏难 勿轻略

  斗闹场 绝勿近 邪僻事 绝勿问

  将入门 问孰存 将上堂 声必扬

  人问谁 对以名 吾与我 不分明

  用人物 须明求 倘不问 即为偷

  借人物 及时还 后有急 借不难

  信

  凡出言 信为先 诈与妄 奚可焉

  话说多 不如少 惟其是 勿佞巧

  奸巧语 秽污词 市井气 切戒之

  见未真 勿轻言 知未的 勿轻传

  事非宜 勿轻诺 苟轻诺 进退错

  凡道字 重且舒 勿急疾 勿模糊

  彼说长 此说短 不关己 莫闲管

  见人善 即思齐 纵去远 以渐跻

  见人恶 即内省 有则改 无加警

  唯德学 唯才艺 不如人 当自砺

  若衣服 若饮食 不如人 勿生戚

  闻过怒 闻誉乐 损友来 益友却

  闻誉恐 闻过欣 直谅士 渐相亲

  无心非 名为错 有心非 名为恶

  过能改 归于无 倘掩饰 增一辜

  泛 爱 众

  凡是人 皆须爱 天同覆 地同载

  行高者 名自高 人所重 非貌高

  才大者 望自大 人所服 非言大

  己有能 勿自私 人所能 勿轻訾

  勿谄富 勿骄贫 勿厌故 勿喜新

  人不闲 勿事搅 人不安 勿话扰

  人有短 切莫揭 人有私 切莫说

  道人善 即是善 人知之 愈思勉

  扬人恶 即是恶 疾之甚 祸且作

  善相劝 德皆建 过不规 道两亏

  凡取与 贵分晓 与宜多 取宜少

  将加人 先问己 己不欲 即速已

  恩欲报 怨欲忘 报怨短 报恩长

  待婢仆 身贵端 虽贵端 慈而宽

  势服人 心不然 理服人 方无言

  亲 仁

  同是人 类不齐 流俗众 仁者希

  果仁者 人多畏 言不讳 色不媚

  能亲仁 无限好 德日进 过日少

  不亲仁 无限害 小人进 百事坏

  余 力 学 文

  不力行 但学文 长浮华 成何人

  但力行 不学文 任己见 昧理真

  读书法 有三到 心眼口 信皆要

  方读此 勿慕彼 此未终 彼勿起

  宽为限 紧用功 工夫到 滞塞通

  心有疑 随札记 就人问 求确义

  房室清 墙壁净 几案洁 笔砚正

  墨磨偏 心不端 字不敬 心先病

  列典籍 有定处 读看毕 还原处

  虽有急 卷束齐 有缺坏 就补之

  非圣书 屏勿视 蔽聪明 坏心志

  勿自暴 勿自弃 圣与贤 可驯致

  繁体字版:

  弟子規

  總 敘

  弟子規 聖人訓 首孝弟 次謹信

  泛愛眾 而親仁 有餘力 則學文

  入 則 孝

  父母呼 應勿緩 父母命 行勿懶

  父母教 須敬聽 父母責 須順承

  冬則溫 夏則凊 晨則省 昏則定

  出必告 反必面 居有常 業無變

  事雖小 勿擅為 苟擅為 子道虧

  物雖小 勿私藏 苟私藏 親心傷

  親所好 力為具 親所惡 謹為去

  身有傷 貽親憂 德有傷 貽親羞

  親愛我 孝何難 親憎我 孝方賢

  親有過 諫使更 怡吾色 柔吾聲

  諫不入 悅複諫 號泣隨 撻無怨

  親有疾 藥先嘗 晝夜侍 不離床

  喪三年 常悲咽 居處變 酒肉絕

  喪盡禮 祭盡誠 事死者 如事生

  出 則 弟

  兄道友 弟道恭 兄弟睦 孝在中

  財物輕 怨何生 言語忍 忿自泯

  或飲食 或坐走 長者先 幼者後

  長呼人 即代叫 人不在 己即到

  稱尊長 勿呼名 對尊長 勿見能

  路遇長 疾趨揖 長無言 退恭立

  騎下馬 乘下車 過猶待 百步餘

  長者立 幼勿坐 長者坐 命乃坐

  尊長前 聲要低 低不聞 卻非宜

  進必趨 退必遲 問起對 視勿移

  事諸父 如事父 事諸兄 如事兄

  謹

  朝起早 夜眠遲 老易至 惜此時

  晨必盥 兼漱口 便溺回 輒淨手

  冠必正 紐必結 襪與履 俱緊切

  置冠服 有定位 勿亂頓 致汙穢

  衣貴潔 不貴華 上循分 下稱家

  對飲食 勿揀擇 食適可 勿過則

  年方少 勿飲酒 飲酒醉 最為醜

  步從容 立端正 揖深圓 拜恭敬

  勿踐閾 勿跛倚 勿箕踞 勿搖髀

  緩揭簾 勿有聲 寬轉彎 勿觸棱

  執虛器 如執盈 入虛室 如有人

  事勿忙 忙多錯 勿畏難 勿輕略

  鬥鬧場 絕勿近 邪僻事 絕勿問

  將入門 問孰存 將上堂 聲必揚

  人問誰 對以名 吾與我 不分明

  用人物 須明求 倘不問 即為偷

  借人物 及時還 後有急 借不難

  信

  凡出言 信為先 詐與妄 奚可焉

  話說多 不如少 惟其是 勿佞巧

  奸巧語 穢汙詞 市井氣 切戒之

  見未真 勿輕言 知未的 勿輕傳

  事非宜 勿輕諾 苟輕諾 進退錯

  凡道字 重且舒 勿急疾 勿模糊

  彼說長 此說短 不關己 莫閑管

  見人善 即思齊 縱去遠 以漸躋

  見人惡 即內省 有則改 無加警

  唯德學 唯才藝 不如人 當自礪

  若衣服 若飲食 不如人 勿生戚

  聞過怒 聞譽樂 損友來 益友卻

  聞譽恐 聞過欣 直諒士 漸相親

  無心非 名為錯 有心非 名為惡

  過能改 歸於無 倘掩飾 增一辜

  泛 愛 眾

  凡是人 皆須愛 天同覆 地同載

  行高者 名自高 人所重 非貌高

  才大者 望自大 人所服 非言大

  己有能 勿自私 人所能 勿輕訾

  勿諂富 勿驕貧 勿厭故 勿喜新

  人不閑 勿事攪 人不安 勿話擾

  人有短 切莫揭 人有私 切莫說

  道人善 即是善 人知之 愈思勉

  揚人惡 即是惡 疾之甚 禍且作

  善相勸 德皆建 過不規 道兩虧

  凡取與 貴分曉 與宜多 取宜少

  將加人 先問己 己不欲 即速已

  恩欲報 怨欲忘 報怨短 報恩長

  待婢僕 身貴端 雖貴端 慈而寬

  勢服人 心不然 理服人 方無言

  親 仁

  同是人 類不齊 流俗眾 仁者希

  果仁者 人多畏 言不諱 色不媚

  能親仁 無限好 德日進 過日少

  不親仁 無限害 小人進 百事壞

  餘 力 學 文

  不力行 但學文 長浮華 成何人

  但力行 不學文 任己見 昧理真

  讀書法 有三到 心眼口 信皆要

  方讀此 勿慕彼 此未終 彼勿起

  寬為限 緊用功 工夫到 滯塞通

  心有疑 隨劄記 就人問 求確義

  房室清 牆壁淨 幾案潔 筆硯正

  墨磨偏 心不端 字不敬 心先病

  列典籍 有定處 讀看畢 還原處

  雖有急 卷束齊 有缺壞 就補之

  非聖書 屏勿視 蔽聰明 壞心志

  勿自暴 勿自棄 聖與賢 可馴致
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: