USACO Training3.1联系【排序终极题目】By cellur925
这题我们很容易想到直接枚举即可。算法本身并没有什么难度但是细节超多!于是这题整整卡了一天.......
(不,还是我太弱了。)
期间还暴露出一些平时没有特别注意的问题,这次一起解决。
开始想的是枚举每个长度的串,然后把这个二进制转为十进制的哈希值,用桶来记录一下。但很快就会发现,可能有很多个前导0.譬如说01与001与0001都是不一样的。
那么我们怎么做呢?可以用map映射。也不要转什么哈希值了,直接建立从string到int的映射。(建立方法:如果在map表中出现,对应的桶直接计数器加一;否则没出现(map值为0)则新开)。
另外,我们完全没有必要把串都读入后再统一枚举,而可以边读入边枚举串。
然后输出也是很恶心的....最后抄redbag的了
那些小问题写在代码里。
Code
/*
ID:cellur_2
TASK:contact
LANG:C++
*/
#include<cstdio>
#include<algorithm>
#include<map>
#include<iostream>//string类型在iostream库里 using namespace std; map<string,int>m;
int n,A,B,res,len;
char ch,seq[];//不是200 qwq 读错题。
struct node{
string str;
int tong;
}p[]; bool cmp(node x,node y)
{
if(x.tong==y.tong)
{
if(x.str.size()==y.str.size())
return x.str<y.str;
return x.str.size()<y.str.size();
}
return x.tong>y.tong;
} int main()
{
freopen("contact.in","r",stdin);
freopen("contact.out","w",stdout);
scanf("%d%d%d",&A,&B,&n);//输入顺序错了yyy
while((ch=getchar())!=EOF)//这里竟然要加括号。
{
if(ch==''||ch=='')
{
seq[++len]=ch;
string tmp="";//string加值不能为空 而且要双引号
int lim=max(,len-B+);
for(int i=len;i>=lim;i--)
{
tmp=seq[i]+tmp;//必须这样写
//是有严格先后顺序的 否则不对
if(len-i+>=A)
{
if(m[tmp]==)//用map 从未出现
{
m[tmp]=++res;
p[m[tmp]].str=tmp;
}
p[m[tmp]].tong++;
}
}
}
}
sort(p+,p+res+,cmp);
// for(int i=1;i<=res;i++) printf("%d\n",p[i].tong);
/* while(n--)
{
printf("%d\n",p[pos].tong);
int fake=0,pre=pos;
// cout<<pre<<"@@@";
while(p[pos].tong==p[pos+1].tong)
pos++;
for(int i=pre;i<=pos;i++)
{
fake++;
if(fake>6) printf("\n"),fake=0;
cout<<p[i].str<<" ";
}
if(pos==pre) pos++;
printf("\n");
}
之前自己写的输出 但是用while控制就会出现死循环。
比如数据2:
1 4 10
1
在我写的之下可能会陷入死循环。
*/
int xx=;
for (int i=;i<=res;i++)
{
if (n==&&p[i].tong!=p[i-].tong) break;
if (p[i].tong==p[i-].tong)
{
if (xx%==) cout<<p[i].str;
else cout<<" "<<p[i].str;
xx++;
if (xx%==) printf("\n");
}
else
{
n--;
if (i!=&&xx%!=) printf("\n");
printf("%d\n",p[i].tong);
cout<<p[i].str;
xx=;
}
}
if (xx%!=) printf("\n");
return ;
}
USACO Training3.1联系【排序终极题目】By cellur925的更多相关文章
- UVa 10905 - Children's Game 排序,题目没有说输入是int 难度: 0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- USACO Training3.3亚瑟王的宫殿【搜索】By cellur925
题目传送门 因为太蒟了,所以参考了dalao@zbtrs == 对此表示感谢并侵删. 看起来我们就知道这是搜索题. 最后的情况分两种:有骑士背国王/国王自食其力走到集合点. 首先,我们不知道大家 ...
- USACO Training3.2 01串 By cellur925
题目传送门 一句话题意:求长度为n的有m个1的大小为第k个的01串. 暑假我做的时候是真·大暴力,用二进制枚举,55分,成功T掉无数点. 正解:开始可以用计数类dp来“预处理”,状态和转移都比较好想. ...
- USACO Training3.3 A Game【区间Dp】 By cellur925
题目传送门 一股浓浓的博弈论香气...然而本蒟并不会博弈论. 开始用双端队列+假的dp水过了24pts水数据. 其实是布星的,两人都绝顶聪明会深谋远虑不像我只看眼前,所以上述算法错误. 正解:区间dp ...
- Luogu P1137 旅行计划 【拓扑排序+Dp】By cellur925
题目传送门 由于满足游览先后顺序从西到东的性质,我们很自然的想到用拓扑排序处理出一个合理的游览顺序. 然鹅,之后呢? 事实上,拓扑排序常与Dp相结合,解决后效性.我们就可以在每次拓扑入队的时候更新答案 ...
- 算法笔记(c++)--桶排序题目
算法笔记(c++)--桶排序 记得题目是排序,输入n个1-1000的数字然后去重然后排序. 桶排序没毛病 #include<iostream> using namespace std; i ...
- USACO翻译:USACO 2013 NOV Silver三题
USACO 2013 NOV SILVER 一.题目概览 中文题目名称 未有的奶牛 拥挤的奶牛 弹簧牛 英文题目名称 nocow crowded pogocow 可执行文件名 nocow crowde ...
- USACO翻译:USACO 2014 FEB SILVER 三题
USACO 2014 FEB SILVER 一.题目概览 中文题目名称 自动打字 路障 神秘代码 英文题目名称 auto rblock scode 可执行文件名 auto rblock scode 输 ...
- RMQ——[USACO Jan07] 均衡队形题解
题目:[USACO Jan07] 均衡队形 描述: 题目描述 农夫约翰的 N (1 ≤ N ≤ 50,000) 头奶牛,每天挤奶时总会按同样的顺序站好.一日,农夫约翰决定为奶牛们举行一个“终极飞盘”比 ...
随机推荐
- c程序设计语言第一章2
练习1.13编写一个程序,打印输入中单词长度的直方图.水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些 #include <stdio.h> #include <stdlib ...
- Intel Developer Forum
http://en.wikipedia.org/wiki/Intel_Developer_Forum Intel Developer Forum From Wikipedia, the free en ...
- ubuntu git ssh不通
xyh@ubuntu-64:~$ ssh -v git@danxinben.com ...
- log开启与屏蔽的一种调式方式
#ifndef _LOGGING_H #define _LOGGING_H #define deg printf #ifdef ENABLE_TRACING #define ENTER() do { ...
- 全志Android SDK编译详解(一)
1.编译环境说明 Linux 服务器(任意电脑都可以,建议选择配置高的)安装ubuntu 10.04 作为编译的主机,其他开发者在xp 下,通过SSH/Telent 等协议登录linux 主机进行编. ...
- 智能停车O2O 独角兽初现:“ETCP停车”获5000万美金A轮融资
日前,国内第一智能停车平台"ETCP停车"宣布完毕A轮融资,由源代码资本.SIG.易车网.经纬中国和商企界知名人士联合投资超过5000万美金.同一时候获悉,ETCP作为中国 ...
- lonlifeOJ1152 “玲珑杯”ACM比赛 Round #19 概率DP
E -- Expected value of the expression DESCRIPTION You are given an expression: A0O1A1O2A2⋯OnAnA0O1A1 ...
- aop中获取方法的注解
@Around(value="@annotation(apiLog)") public Object around(ProceedingJoinPoint pjp, ApiLog ...
- centos笔记-安装特定版本的mysql
centos6的yum默认安装的mysql是5.1版, 如果要安装5.6.16 版,有三个办法 1.yum方式, 这个方式的好处是通过yum安装卸载都很方便,坏处是版本无法详细制定,比如官方版本yum ...
- 关于yum的一些基本的东西
1 sqlite数据库的使用 第一,某个centos版本的包相关的信息都放在一个服务器端的sqlite数据库文件中,yum会下载到本地,进行包安装的时候用. 第二,安装的历史记录放在sqlite数据库 ...