USACO contact

   题目意思是给你一个01串, 让你找出其中长度为A-B的串的频率, 输出频率最高的N个, 直接用map搞定, 代码如下:

  

/*
    ID: m1500293
    LANG: C++
    PROG: contact
*/

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <map>
#include <iostream>
#include <vector>

using namespace std;
typedef pair<string, int> PAIR;
vector<PAIR> vec;
map<string, int> strhash;
string input;

int trans(string s)
{
    int res = 0;
    int len = s.length();
    int i = 0;
    while(i < len)
    {
        res = res*2 + s[i]-‘0‘;
        i++;
    }
    return res;
}

bool cmp(const PAIR &a,const PAIR &b)
{
    if(a.second != b.second)
        return a.second > b.second;
    else
    {
        int lena = a.first.length(), lenb=b.first.length();
        if(lena != lenb)
            return lena < lenb;
        int a1=trans(a.first), b1=trans(b.first);
        return a1 < b1;
    }
}

int main()
{

    freopen("contact.in", "r", stdin);
    freopen("contact.out", "w", stdout);
    int A, B, N;
    scanf("%d%d%d", &A, &B, &N);
    string tp;
    input = "";
    while(cin>>tp)
    {
        input += tp;
    }
    //cout<<input<<endl;
    int len = input.length();
    for(int i=0; i<len; i++)
    {
        for(int j=A; j<=B; j++)  if(i+j-1<len)
        {
            string str(input, i, j);
            //cout<<str<<endl;
            if(strhash.find(str) == strhash.end())
            {
                strhash[str] = 1;
            }
            else
                strhash[str]++;
        }
    }
    map<string, int>::iterator it;
    for(it=strhash.begin(); it!=strhash.end(); ++it)
        vec.push_back(*it);
    sort(vec.begin(), vec.end(), cmp);
//    for(int i=0; i<vec.size(); i++)
//    {
//        cout<<vec[i].first<<" "<<vec[i].second<<endl;
//    }

    int idx = 0;
    int vecsize = vec.size();
    for(int i=0; i<N&&idx<vecsize; i++)
    {
        int fre = vec[idx].second;
        cout<<fre<<endl;
        int output = 0;
        int num = 0;
        while(idx<vecsize && fre==vec[idx].second)
        {
            cout<<vec[idx].first;
            num++;
            output++;
            if(output==6)
            {
                output = 0;
                cout<<endl;
            }
            else
            {
                if(idx+1<vecsize && vec[idx+1].second==fre)
                    cout<<" ";
            }
            idx++;
        }
        if(num%6 != 0)
        cout<<endl;
    }
}
时间: 2024-10-25 08:21:46

USACO contact的相关文章

USACO 3.1 Contact

http://www.nocow.cn/index.php/Translate:USACO/contact 题目大意:给一个只含0和1的序列,统计每个子序列的重复次数,并按次数递减来输出 考虑子序列时将序列前面加一个'1'然后转化成二进制整数,这样每个子序列与整数一一对应,统计二进制整数出现次数,按要求输出即可(ps:usaco老是喜欢在输出上做文章)代码如下(未提交): 1 /********************************************** 2 *** Proble

USACO Training Section 3.1 Contact

P2724 联系 Contact 题目背景 奶牛们开始对用射电望远镜扫描牧场外的宇宙感兴趣.最近,他们注意到了一种非常奇怪的脉冲调制微波从星系的中央发射出来.他们希望知道电波是否是被某些地外生命发射出来的,还是仅仅是普通的的星星发出的 题目描述 帮助奶牛们用一个能够分析他们在文件中记下的记录的工具来找到真相.他们在寻找长度在A到B之间(包含A和B本身)在每天的数据文件中重复得最多的比特序列 (1 <= A <= B <= 12).他们在找那些重复得最多的比特序列.一个输入限制告诉你应输出

*usaco题目分享——Contact

ContactIOI'98 The cows have developed a new interest in scanning the universe outside their farm with radiotelescopes. Recently, they noticed a very curious microwave pulsing emission sent right from the centre of the galaxy. They wish to know if the

USACO 3.2 Contact

ContactIOI'98 The cows have developed a new interest in scanning the universe outside their farm with radiotelescopes. Recently, they noticed a very curious microwave pulsing emission sent right from the centre of the galaxy. They wish to know if the

【USACO 3.1.5】联系

[描述] 奶牛们开始对用射电望远镜扫描牧场外的宇宙感兴趣.最近,他们注意到了一种非常奇怪的脉冲调制微波从星系的中央发射出来.他们希望知道电波是否是被某些地外生命发射出来的,还是仅仅是普通的的星星发出的. 帮助奶牛们用一个能够分析他们在文件中记下的记录的工具来找到真相.他们在寻找长度在A到B之间(含)在每天的数据文件中重复得最多的比特序列 (1 <= A <= B <= 12).他们在找那些重复得最多的比特序列.一个输入限制告诉你应输出多少频率最多的序列. 符合的序列可能会重叠,并且至少出

洛谷 P3133 [USACO16JAN]无线电联系Radio Contact

P3133 [USACO16JAN]无线电联系Radio Contact 题目描述 Farmer John has lost his favorite cow bell, and Bessie the cow has agreed to help him find it! They both fan out and search the farm along different paths, but stay in contact via radio so they can keep in to

COGS 696. [IOI1996][USACO 2.3] 最长前缀

★   输入文件:prefix.in   输出文件:prefix.out   简单对比时间限制:1 s   内存限制:128 MB 描述 USACO 2.3.1 IOI96 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣. 如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素.元素不一定要全部出现(如下例中B

手动添加arraylist注解类(Contact联系人对象)

因为在Java核心库不支持arraylist xml直接注解,这里可以自己写个小工具类 Contact.java: package com.newer.xml; import java.util.ArrayList; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.ElementList; import org.simp

USACO prefix TrieTree + DP

/* ID:kevin_s1 PROG:prefix LANG:C++ */ #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <vector> #include <map> #include <set> #include <algorithm> #include <cstdlib>