关闭

Contact_usaco3.1_暴力

标签: 模拟暴力c++usaco蛋疼的奶牛
328人阅读 评论(0) 收藏 举报
分类:

题目描述 Description


奶牛们开始对用射电望远镜扫描牧场外的宇宙感兴趣。最近,他们注意到了一种非常奇怪的脉冲调制微波从星系的中央发射出来。他们希望知道电波是否是被某些地外生命发射出来的,还是仅仅是普通的的星星发出的。

帮助奶牛们用一个能够分析他们在文件中记下的记录的工具来找到真相。他们在寻找长度在A到B之间(包含A和B本身)在每天的数据文件中重复得最多的比特序列 (1 <= A <= B <= 12)。他们在找那些重复得最多的比特序列。一个输入限制告诉你应输出多少频率最多的序列。

符合的序列可能会重叠,并且至少出现一次的序列会被计数。

输入描述 Input Description


第一行: 三个用空格分隔的整数: A, B, N; (1 <= N < 50)

第二行及以后: 一个最多200,000字符的序列,全是0或1; 每行字符数不大于80。

输出描述 Output Description


输出N个频率最高的序列(按照频率由高到低的次序)。由短到长排列频率相同的这些序列,如果长短相同,按二进制大小排列。如果出现的序列个数小于N,输出存在的序列。

对于每个存在的频率,先输出单独包含该频率的一行,再输出以空格分隔的这些序列。每行六个(除非少于六个剩下)。

题解 Analysis


题解众说纷纭,然而我用暴力过了(笑)

暴力出奇迹!!

枚举合法长度的子串压成二进制,用cal[i][j]表示长度为i的子串j的个数
为什么要加第一维j呢?
考虑到会出现如0001001的两个不同子串,然而压成二进制后他们是相等的,为了避免这种情况就加上长度的限制条件,最后暴力找一下就可以了
输出略坑,每六个换行。usaco出题人是强迫症重度患者?

数组大小?不清楚,随手开的;-D

看来是时候要搞一发字典树了(flag)

Code


/*
ID:wjp13241
PROG:contact
LANG:C++
*/
#include <stdio.h>
#include <cstring>
#include <queue>
using namespace std;
struct mes
{
    int st,ed;
};
queue<mes>ans;
bool vis[13][8193];
mes rec[13][8193];
int cal[13][8193];
int num[200011];
char s[255];
int get(int st,int ed)
{
    int bnry=0;
    for (int i=ed;i>=st;i--)
        bnry+=(num[i]<<(ed-i+1));
    return bnry;
}
int main()
{
    freopen("contact.in","r",stdin);
    freopen("contact.out","w",stdout);
    int a,b,n;
    scanf("%d%d%d",&a,&b,&n);
    int limit=(1<<(b+1));
    while (scanf("%s",s)!=EOF)
    {
        for (int i=0;i<strlen(s);i++)
            num[++num[0]]=s[i]-'0';
    }
    for (int i=a;i<=b;i++)
    {
        for (int j=1;j<=num[0]-i+1;j++)
        {
            int tmp=get(j,j+i-1);
            cal[i][tmp]++;
            if (!rec[i][tmp].st)
                rec[i][tmp]=(mes){j,j+i-1};
        }
    }
    while (n--)
    {
        int max=0,cnt=0;
        for (int i=a;i<=b;i++)
            for (int j=0;j<=limit;j++)
                if ((max<cal[i][j])&&(!vis[i][j]))
                    max=cal[i][j];
        if (!max)
            break;
        printf("%d\n",max);
        for (int i=a;i<=b;i++)
            for (int j=0;j<=limit;j++)
                if (max==cal[i][j])
                {
                    vis[i][j]=true;
                    ans.push(rec[i][j]);
                }
        while (ans.size()>1)
        {
            mes now=ans.front();ans.pop();
            for (int i=now.st;i<=now.ed;i++)
                printf("%d",num[i]);
            if (!(++cnt%6))
                printf("\n");
            else
                printf(" ");
        }
        mes now=ans.front();ans.pop();
        for (int i=now.st;i<=now.ed;i++)
                printf("%d",num[i]);
        printf("\n");
    }
    return 0;
}
1
0
查看评论

暴力刷机步骤

下载相应的rom刷机包 确认手机能用usb数据线正常的连接电脑 手机里必须安装第三方的recovery 手机必须处于UNLOCK状态,若不是可用刷机精灵,卓大师,刷机大师等解锁 (1) 第一步,装驱动。连接电脑,在设备管理器里把手机的驱动装上。相信大家应该都已经会...
  • u013457167
  • u013457167
  • 2014-12-17 18:33
  • 2314

算法学习之暴力求解

暴力求解(brute force) Brute force is a straightforward approach to solving a problem, usually directly based on the problem statement and definitions of...
  • u012411003
  • u012411003
  • 2015-06-15 21:48
  • 2145

模式匹配之BF(Brute Force)暴力算法

模式匹配即子串定位,是查找子串在主串中第一次出现的位置的过程,查找成功则返回改位置,否则返回-1 匹配过程是怎么样的呢? 首先比较主串和子串中第一个位置的字符(i,j分别表示主串,子串中的位置),所以初始化i=1,j=1;如果该字符相等,则继续比较两串中下一位置的字符,否则i回溯到上次开始...
  • qq_33001647
  • qq_33001647
  • 2017-04-01 10:03
  • 1082

背包问题-暴力求解

背包问题是算法中的经典问题,可以用许多种方法来求解。本处详细阐述一下基于暴力搜索的背包求解。     假设有n个物体,价值和重量分别用vi和wi来表示,用暴力搜索,我们将最终的解用一个向量来表示,因此所有的解空间可以用00...00到11...11来表示。而这些数恰对应0至2^n...
  • u011414643
  • u011414643
  • 2014-11-20 09:18
  • 417

算法:暴力字符串查找

一、字符串查找  给定一段长度为N的文本和一个长度为M的模式(pattern)字符串,在文本中找到一个和该模式相符的子字符串;    二、暴力字符串查找  在文本中模式可能出现匹配的任何地方检察匹配是否存在;  ...
  • p106786860
  • p106786860
  • 2014-01-08 09:46
  • 2670

字符串匹配的算法(暴力算法和KMP算法)

学习字符串匹配算法有一段时间了,不过还是有点迷糊,虽然了解算法过程,但是在编码的时候还是会有些迷糊。 先把写的程序放在这里,以后有时间再来翻着看看吧! #include #include using namespace std; int KMPfind(char* s, char* p); void...
  • shiwazone
  • shiwazone
  • 2015-04-21 09:18
  • 971

Java 反射(成员方法) 相当暴力啊 暴力反射

从字节码文件。获取成员方法,并运行,重要部分      A 获取字节码文件对象      B 通过字节码文件对象,获取成员方法  Method[]   getDeclaredMethods()   ...
  • m75100313
  • m75100313
  • 2014-01-06 23:08
  • 2038

java对类私有变量的暴力反射

假设有一个类,他有一个私有变量: package com.howlaa.day04; public class ReflectPoint { private int priVar; public ReflectPoint(int priVar){ this.priVar =priVar; }...
  • howlaa
  • howlaa
  • 2013-11-20 20:55
  • 5866

防止网络暴力最简单的两种方式很有效

1、 内容制造者:平台在允许制造者访问系统之前就要对他们进行管理。比如CupidCurated网站就用一整个团队来管理那些访问他们系统的人。那些肆意破坏约会网站的用户,他们的喜好可以被很好的掌握。此外,Quibb网站也对社区访问进行管理,而Medium论坛则对所有写手进行管理,但是对访问平台的读者是...
  • u013274824
  • u013274824
  • 2013-12-25 14:22
  • 1447

算法之暴力求解

算法之暴力求解 暴力求解的简单解释: 很多问题都可以”暴力解决”——不用太动脑筋,把所有的可能性都列举出来,然后一一实验。尽管这样的方法显得很”笨”,但却可以常常行之有效。简单枚举: 在枚举复杂对象之前,让我们先尝试着枚举一些相对简单的东西,如整数,字串等。 除法: 输入正整数n, 按从小到大的...
  • XXJ19950917
  • XXJ19950917
  • 2017-06-15 15:21
  • 260
    个人资料
    • 访问:115012次
    • 积分:6957
    • 等级:
    • 排名:第3957名
    • 原创:561篇
    • 转载:7篇
    • 译文:0篇
    • 评论:27条
    联系我
    QQ:315253566
    最新评论