题意:给你一个01字符串,将长度为a到b之间(包含a、b)的子串按照出现次数排序。注意输入输出格式

题解:01子串对应一个二进制,为了区别11和011这样的不同子串,我们把长度也记录下来,官方题解是在子串前加上1来区别。然后按次数排序。为了方便,我将字符串代表的二进制转化为int整数,输出时再转化为字符串。

http://train.usaco.org/usacoprob2?a=F1brtx4Sr2b&S=contact

/*
TASK:contact
LANG:C++
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int time[20][5000];
int a,b,n;
char s[200005];
int cnt;
int toB(int be,int len){int ans=0;for(int i=0;i<len;i++)ans=ans*2+(s[be+i]=='1');return ans;
}
struct node{int time,v,len;
}e[100000];
bool cmp(node a,node b){return a.time>b.time||a.time==b.time&&(a.len<b.len||a.len==b.len&&a.v<b.v);
}
void toS(int v,int len){char s[20]="";for(int i=len-1;i>=0;i--){s[i]=v%2+'0';v/=2;}printf("%s",s);
}
int main(){freopen("contact.in","r",stdin);freopen("contact.out","w",stdout);scanf("%d%d%d",&a,&b,&n);while(~scanf("%s",s+strlen(s)));int l=strlen(s);for(int i=0;i<l-a+1;i++)for(int j=a;j<=b&&i+j<=l;j++)time[j][toB(i,j)]++;//长度j的值为toB的子串出现次数++for(int i=a;i<=b;i++)for(int j=0;j<1<<i;j++)if(time[i][j])e[cnt++]=(node){time[i][j],j,i};//出现次数不为0的子串放入e中sort(e,e+cnt,cmp);//按出现次数排序int num;for(int i=0,j=0;i<cnt;i++){if(!i||e[i].time!=e[i-1].time){//如果和上一个子串次数不同j++;if(j>n)break;//只输出前n大的。printf("%d\n",e[i].time);num=0;}toS(e[i].v,e[i].len);num++;if(e[i].time==e[i+1].time && num%6)printf(" ");else//下一个子串和当前子串的出现次数不同或者是第6个了,就要换行puts("");}return 0;
}

  

【USACO 3.1】Contact(01子串按出现次数排序)相关推荐

  1. Java实现固定长度得01子串

    固定位数得01子串 Description 对于长度为n的一个01串,每一位都可能是0或1,一共有2 ^n 种可能.请按从小到大的顺序输出这2^n种01串. Input 包含多组数据,每组数据占一行, ...

  2. 计算字符串中子串出现的次数

    计算字符串中子串出现的次数 1.程序分析: 2.程序源代码: #include "string.h" #include "stdio.h" main() { c ...

  3. C语言经典例96-计算字符串中子串出现的次数

    目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 计算字符串中子串出现的次数 2 分析 串的模式匹配在数据结构中有KMP算法,但这个算法实现起来繁琐,难度很大,所以对于一般来说,使用暴力法求 ...

  4. c语言字符串子串问题,C语言计算字符串子串出现的次数

    #include #include int substring(char *str,char *str1);//函数原型 int main(void) { char str[64]={0}; char ...

  5. 接收输入的一行字符,统计出字符串包含数字的个数 2、编写一个程序,计算字符串中子串出现的次数 3、请输入星期几的第1个字母,用来判断是星期几,如果第1个字母一样,则继续判断第2个字母,依次类推。

    1.接收输入的一行字符,统计出字符串包含数字的个数 list_1 = input('请输入一行字符串:') count = 0 for i in list_1:if '0' <= i <= ...

  6. [USACO Section 3.2] 01串 Stringsobits (动态规划)

    题目链接 Solution 贼有意思的 DP, 也可以用组合数学做. \(f[i][j]\) 代表前 \(i\) 位,有 \(j\) 个 \(1\) 的方案数. 转移方程很简单 : \(f[i][j] ...

  7. 查询一个字符串的子串出现的次数在sql中

    select name,char_length(name)-char_length(replace(name,'aaaaaa','')) from teacher; 将原来的字符串字段取出长度  将子 ...

  8. HDU 1686 Oulipo【kmp求子串出现的次数】

    The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...

  9. python编写一个程序、计算字符串中子串出现的次数_急求。。。C语言实现,计算字符串中子串出现的次数,就是先输入一个字符串,再输入一个上面字符串中存在...

    展开全部 #include #include void main() { char str1[20], str2[20], *p1, *p2; int sum=0; printf("Plea ...

最新文章

  1. 当当网强烈谴责李国庆有关刘强东案言论
  2. 顺序循环队列队满队空的两种判别方式
  3. QML绘制不同类型的图表
  4. Nginx学习之三-ngx_http_request_t结构体
  5. 黑白两客进入页面(1)
  6. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第23篇]写一个实现蒙哥马利算法的C程序
  7. php打开rs232,php_ser_5.2.0-5.2.17
  8. 浅谈文字识别:新观察、新思考、新机遇
  9. html+css+js实现登录页面
  10. [转载] 杜拉拉升职记——53 自由自在地活
  11. 分布式服务-DUBBOX(五):集成服务生产者
  12. python—符号 | ^的使用
  13. Unix环境高级编程(十九)终端I/O
  14. 记一次Win7连接XP共享打印机
  15. HTML中美化页面,10 使用CSS美化页面
  16. 选择html5抛弃flash,谷歌Chrome年底正式抛弃Flash 全面转向HTML5
  17. python 找色点击_[原创]python实现触动精灵引擎找色找字函数,为机器学习添加手脚...
  18. SPSS作业-方差分析-双因素分析
  19. golang使用xlsx操纵excel浅析
  20. .net MVC 局部视图

热门文章

  1. 中国农民丰收节交易会全国贫困地区农产品产销对接行动
  2. 【GitHub】github相关问题和解决办法
  3. Source Insight中的多行注释
  4. 一个多版本IE共存软件 IETester(支持IE5.5,6,7,8Beta1)
  5. 读书笔记 |《推荐系统实践》- 个性化推荐系统总结
  6. 日活4000万,占据22%手游时长份额的竟然是……(文末有彩蛋)
  7. 在抛弃 MVP-Clean 后,我自主设计并开源了 Viabus 架构
  8. Maven使用详解视频课程——笔记(一)
  9. 委托学习总结(一)浅谈对C#委托理解
  10. 腾讯 Web UI 解决方案 QMUI Web —— 探索与沉淀