| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 492 人关注过本帖
标题:一道ACM的题求解
只看楼主 加入收藏
红糖水
Rank: 2
等 级:论坛游民
帖 子:42
专家分:11
注 册:2013-2-3
结帖率:100%
收藏
 问题点数:0 回复次数:7 
一道ACM的题求解
Problem C
小媛在努力
时间限制:1000 ms  |  内存限制:65535 KB
描述
在多媒体数据处理中,数据压缩算法尤为重要。小媛上完课后就想自己发明一个数据压缩算法。她想呀想,终于想到一个方法。在多媒体数据中有很多数据都是重复的,所以她想把连续相同的数据用数据出现的次数和数据本身表示。例如:1 1 1 2 3 3 3 3 3  压缩后及为3 1 1 2 5 3(表示3个1,1个2和5个3)。有想法后小媛就希望把它用代码实现了。但是大家都知道小媛现在整天都忙着苦B的复习考研,连电脑都摸不到。所以她希望作为ACMer的你帮她写一下。
输入
输入包含多组数据,第一行一个数字T代表输入样例数。

每组样例开始一个数M < 10^7表示这组数据中数字的个数,接下来M个数表示要被压缩的数字(数字都不超过int表示的范围)。
输出
每组测试数据输出一行数字对,如上面描述的一样。两个数字之间用一个空格隔开。
样例输入
1
9 1 1 1 2 3 3 3 3 3 样例输出
3 1 1 2 5 3
搜索更多相关主题的帖子: 多媒体 
2013-02-04 17:32
风雨123
Rank: 2
等 级:论坛游民
帖 子:84
专家分:65
注 册:2013-2-23
收藏
得分:0 
soory,我试着做了,没有做出来。
2013-02-24 14:25
fangjun666
Rank: 1
来 自:四川成都
等 级:新手上路
帖 子:4
专家分:5
注 册:2012-12-25
收藏
得分:0 
#include<iostream>
//用一个数组来存放输入的样例,用另外一个数组来存放每个连续数字的个数
//只统计连续相同的数,不相邻的即使相同也要重新实现
int E[1000];
struct total{
    int data;
    int count;
}C[1000];           //统计数组

int main()
{
    int T; //输入样例个数的参数
    int j=0;   //用于C数组的下标
    int cnt = 0;    //内部计数器
    std::cin>>T;
    for (int i=0;i<1000;i++)
    {
        E[i] = 0;
        C[i].data = 0;
        C[i].count = 0;
    }
    for (int i=0;i<T;i++)
    {
        std::cin>>E[i];
    }
    C[0].data = E[0];            //将样例数组的第一个数赋值给C【】
    C[0].count = 1;
    for (int i=0;i<T;i++)
    {
        if (E[i] == E[i+1])   //如果连续的数相同只添加个数不改变原来的值
        {
            C[j].count++;
        }
        else if (E[i] != E[i+1])
        {
            //i= i+1;
            j++;
            C[j].count++;
            C[j].data = E[i+1];
        }
    }
    for (int k=0;k<j;k++)
    {
        std::cout<<C[k].count<<" "<<C[k].data<<" ";
    }
    std::cout<<std::endl;
    system("pause");
    return 0;
}
不知道这样能不能在比较多数据的时候满足时间上的要求。还没有仔细想其他的方法,不过可以完成题目例子。

付出是为收获
2013-02-25 00:23
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
。。。。

仰望星空...........不忘初心!
2013-02-25 00:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
贴在C++板块中,我认为你要C++代码;但第一句话就是Problem C,又不得不认为你要的是C代码。你的行为令我迷糊

程序代码:
#include <stdio.h>

int main()
{
    int t;
    scanf( "%d", &t );
    while( t-- )
    {
        int m, a=0, b=0;
        scanf( "%d", &m );
        while( m-- )
        {
            int d;
            scanf( "%d", &d );

            if( d == b )
            {
                ++a;
            }
            else
            {
                if( b != 0 )
                    printf( "%d %d ", a, b );
                a = 1;
                b = d;
            }
        }
        if( b != 0 )
            printf( "%d %d\n", a, b );
    }

    return 0;
}

2013-02-25 08:32
红糖水
Rank: 2
等 级:论坛游民
帖 子:42
专家分:11
注 册:2013-2-3
收藏
得分:0 
回复 5楼 rjsp
PROBLEM C是题目。。。我表示很无语
2013-03-12 09:23
红糖水
Rank: 2
等 级:论坛游民
帖 子:42
专家分:11
注 册:2013-2-3
收藏
得分:0 
回复 2楼 风雨123
没事,我做出来了
2013-03-12 09:24
红糖水
Rank: 2
等 级:论坛游民
帖 子:42
专家分:11
注 册:2013-2-3
收藏
得分:0 
回复 3楼 fangjun666
数组永远不够大,要一个个的输入
2013-03-12 09:24
快速回复:一道ACM的题求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035063 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved