【USACO 3.1】Contact(01子串按出现次数排序)
题意:给你一个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子串按出现次数排序)相关推荐
- Java实现固定长度得01子串
固定位数得01子串 Description 对于长度为n的一个01串,每一位都可能是0或1,一共有2 ^n 种可能.请按从小到大的顺序输出这2^n种01串. Input 包含多组数据,每组数据占一行, ...
- 计算字符串中子串出现的次数
计算字符串中子串出现的次数 1.程序分析: 2.程序源代码: #include "string.h" #include "stdio.h" main() { c ...
- C语言经典例96-计算字符串中子串出现的次数
目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 计算字符串中子串出现的次数 2 分析 串的模式匹配在数据结构中有KMP算法,但这个算法实现起来繁琐,难度很大,所以对于一般来说,使用暴力法求 ...
- c语言字符串子串问题,C语言计算字符串子串出现的次数
#include #include int substring(char *str,char *str1);//函数原型 int main(void) { char str[64]={0}; char ...
- 接收输入的一行字符,统计出字符串包含数字的个数 2、编写一个程序,计算字符串中子串出现的次数 3、请输入星期几的第1个字母,用来判断是星期几,如果第1个字母一样,则继续判断第2个字母,依次类推。
1.接收输入的一行字符,统计出字符串包含数字的个数 list_1 = input('请输入一行字符串:') count = 0 for i in list_1:if '0' <= i <= ...
- [USACO Section 3.2] 01串 Stringsobits (动态规划)
题目链接 Solution 贼有意思的 DP, 也可以用组合数学做. \(f[i][j]\) 代表前 \(i\) 位,有 \(j\) 个 \(1\) 的方案数. 转移方程很简单 : \(f[i][j] ...
- 查询一个字符串的子串出现的次数在sql中
select name,char_length(name)-char_length(replace(name,'aaaaaa','')) from teacher; 将原来的字符串字段取出长度 将子 ...
- HDU 1686 Oulipo【kmp求子串出现的次数】
The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...
- python编写一个程序、计算字符串中子串出现的次数_急求。。。C语言实现,计算字符串中子串出现的次数,就是先输入一个字符串,再输入一个上面字符串中存在...
展开全部 #include #include void main() { char str1[20], str2[20], *p1, *p2; int sum=0; printf("Plea ...
最新文章
- 当当网强烈谴责李国庆有关刘强东案言论
- 顺序循环队列队满队空的两种判别方式
- QML绘制不同类型的图表
- Nginx学习之三-ngx_http_request_t结构体
- 黑白两客进入页面(1)
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第23篇]写一个实现蒙哥马利算法的C程序
- php打开rs232,php_ser_5.2.0-5.2.17
- 浅谈文字识别:新观察、新思考、新机遇
- html+css+js实现登录页面
- [转载] 杜拉拉升职记——53 自由自在地活
- 分布式服务-DUBBOX(五):集成服务生产者
- python—符号 | ^的使用
- Unix环境高级编程(十九)终端I/O
- 记一次Win7连接XP共享打印机
- HTML中美化页面,10 使用CSS美化页面
- 选择html5抛弃flash,谷歌Chrome年底正式抛弃Flash 全面转向HTML5
- python 找色点击_[原创]python实现触动精灵引擎找色找字函数,为机器学习添加手脚...
- SPSS作业-方差分析-双因素分析
- golang使用xlsx操纵excel浅析
- .net MVC 局部视图
热门文章
- 中国农民丰收节交易会全国贫困地区农产品产销对接行动
- 【GitHub】github相关问题和解决办法
- Source Insight中的多行注释
- 一个多版本IE共存软件 IETester(支持IE5.5,6,7,8Beta1)
- 读书笔记 |《推荐系统实践》- 个性化推荐系统总结
- 日活4000万,占据22%手游时长份额的竟然是……(文末有彩蛋)
- 在抛弃 MVP-Clean 后,我自主设计并开源了 Viabus 架构
- Maven使用详解视频课程——笔记(一)
- 委托学习总结(一)浅谈对C#委托理解
- 腾讯 Web UI 解决方案 QMUI Web —— 探索与沉淀