题目传送门

这题我们很容易想到直接枚举即可。算法本身并没有什么难度但是细节超多!于是这题整整卡了一天.......

(不,还是我太弱了。)

期间还暴露出一些平时没有特别注意的问题,这次一起解决。

开始想的是枚举每个长度的串,然后把这个二进制转为十进制的哈希值,用桶来记录一下。但很快就会发现,可能有很多个前导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的更多相关文章

  1. UVa 10905 - Children's Game 排序,题目没有说输入是int 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  2. USACO Training3.3亚瑟王的宫殿【搜索】By cellur925

    题目传送门 因为太蒟了,所以参考了dalao@zbtrs ==    对此表示感谢并侵删. 看起来我们就知道这是搜索题. 最后的情况分两种:有骑士背国王/国王自食其力走到集合点. 首先,我们不知道大家 ...

  3. USACO Training3.2 01串 By cellur925

    题目传送门 一句话题意:求长度为n的有m个1的大小为第k个的01串. 暑假我做的时候是真·大暴力,用二进制枚举,55分,成功T掉无数点. 正解:开始可以用计数类dp来“预处理”,状态和转移都比较好想. ...

  4. USACO Training3.3 A Game【区间Dp】 By cellur925

    题目传送门 一股浓浓的博弈论香气...然而本蒟并不会博弈论. 开始用双端队列+假的dp水过了24pts水数据. 其实是布星的,两人都绝顶聪明会深谋远虑不像我只看眼前,所以上述算法错误. 正解:区间dp ...

  5. Luogu P1137 旅行计划 【拓扑排序+Dp】By cellur925

    题目传送门 由于满足游览先后顺序从西到东的性质,我们很自然的想到用拓扑排序处理出一个合理的游览顺序. 然鹅,之后呢? 事实上,拓扑排序常与Dp相结合,解决后效性.我们就可以在每次拓扑入队的时候更新答案 ...

  6. 算法笔记(c++)--桶排序题目

    算法笔记(c++)--桶排序 记得题目是排序,输入n个1-1000的数字然后去重然后排序. 桶排序没毛病 #include<iostream> using namespace std; i ...

  7. USACO翻译:USACO 2013 NOV Silver三题

    USACO 2013 NOV SILVER 一.题目概览 中文题目名称 未有的奶牛 拥挤的奶牛 弹簧牛 英文题目名称 nocow crowded pogocow 可执行文件名 nocow crowde ...

  8. USACO翻译:USACO 2014 FEB SILVER 三题

    USACO 2014 FEB SILVER 一.题目概览 中文题目名称 自动打字 路障 神秘代码 英文题目名称 auto rblock scode 可执行文件名 auto rblock scode 输 ...

  9. RMQ——[USACO Jan07] 均衡队形题解

    题目:[USACO Jan07] 均衡队形 描述: 题目描述 农夫约翰的 N (1 ≤ N ≤ 50,000) 头奶牛,每天挤奶时总会按同样的顺序站好.一日,农夫约翰决定为奶牛们举行一个“终极飞盘”比 ...

随机推荐

  1. Intel HEX文件解析

    近期有一个需求就是为Arduino开发板做一个基于蓝牙的无线烧录程序.眼下的Arduino程序都是通过USB线连接到电脑的主机上,实际的传输过程是基于USB协议的,这个过程还是比較麻烦的.由于每次的编 ...

  2. 性能问题案例02——sybase连接堵塞问题

    现象:近期现场反馈一个问题.系统在审批的时候,常常卡死.整个系统全然用不了,浏览器訪问处于loading的状态. 排查: 1.一般系统挂了首先想到内存问题,可是现象是loading,也就是说没有挂,线 ...

  3. Java,多个线程对同一个数据源的访问

    当多个线程对同一个数据源进行访问时,应对线程同步或加锁.为何?举个简单的例子:有一个共享的数据源dataSource,其值为0.有两个线程,Thread1和Thread2.Thread1的任务是将da ...

  4. window10 java 环境变量配置

    JAVA_HOME (可有可无) CLASSPATH  :   C:\Program Files\Java\jdk1.8.0_91\lib\dt.jar;C:\Program Files\Java\j ...

  5. safi 中placeholder不垂直居中

    用css hack将line-height 设置为1 例子: input{height: 32px; line-height: 32px; [;line-height: 1px;]};

  6. vue 中的组件通信

    vue中组件通信,一般分为三种情况,父与子,子与父,子子之间. 一.父与子通信 父组件将值传给子组件,一般通过props,设置默认的类型.调用的时候通过 xx=" ", 或者:XX ...

  7. codeforces 440C. One-Based Arithmetic 解题报告

    题目链接:http://codeforces.com/problemset/problem/440/C 题目意思:给出一个数你,问需要用到的1来组成这个数的最少数量是多少. 我一开始对每个数只从 “+ ...

  8. 一步一步学Silverlight 2系列(29):使用Transform实现更炫的效果(上)

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. 后台while收发过程

    fuse_loop_mt.c 中fuse_do_work函数使用while循环在后台不断运行,每一个while循环中,主要有两个操作. 1. fuse_session_receive_buf(mt-& ...

  10. SPOJ:One piece(不错的带权括号最大匹配问题)

    One of DB and TN common interests is traveling. One day, they went to Grand Line and found One Piece ...