• CCF考试真题题解


    CCF考试认证:题解参考博客http://blog.csdn.net/u014578266/article/details/45221841

    问题描述
    试题编号:    201503-1
    试题名称:    图像旋转
    时间限制:    5.0s
    内存限制:    256.0MB
    问题描述:    
    问题描述
      旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。
      计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。
    输入格式
      输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。
      接下来n行每行包含m个整数,表示输入的图像。
    输出格式
      输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。
    样例输入
    2 3
    1 5 3
    3 2 4
    样例输出
    3 4
    5 2
    1 3
    评测用例规模与约定
      1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过1000的非负整数。
    #include <iostream>
    #define max 1002
    using namespace std;
    
    int a[max][max];
    int main()
    {
        int m,n;
        while(cin>>n>>m){
            for(int i = 0;i < n;i++){
                for(int j = 0;j < m;j++){
                    cin>>a[i][j];
                }
            }
            for(int j = m-1;j>=0;j--){
                for(int i = 0;i<n;i++){
                    cout<<a[i][j]<<" ";
                }
                cout<<endl;
            }
        }
        return 0;
    }
    View Code
    问题描述
    试题编号:    201503-2
    试题名称:    数字排序
    时间限制:    1.0s
    内存限制:    256.0MB
    问题描述:    
    问题描述
      给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
    输入格式
      输入的第一行包含一个整数n,表示给定数字的个数。
      第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
    输出格式
      输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
    样例输入
    12
    5 2 3 3 1 3 4 2 5 2 3 5
    样例输出
    3 4
    2 3
    5 3
    1 1
    4 1
    评测用例规模与约定
      1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数
    #include <iostream>
    #define max 1005
    using namespace std;
    
    struct a{
        int index;
        int count;
        a(){
            count = 1;
        }
    }b[max],e;
    
    //冒泡排序
    void Sort(int y){
        for(int j = 1;j < y;j++){
        for(int i = 0;i < y-j;i++){
            if(b[i].count < b[i+1].count ||(b[i].count == b[i+1].count && b[i].index > b[i+1].index)){
                e.index = b[i].index;
                e.count = b[i].count;
                b[i].index = b[i+1].index;
                b[i].count = b[i+1].count;
                b[i+1].index = e.index;
                b[i+1].count = e.count;
            }
        }
    }
    }
    int main()
    {
        int n,c;
        while(cin>>n){
                int Index = 1;
                cin>>b[0].index;
            for(int i = 1;i < n;i++){
                cin>>c;
                bool zhang = true;
                for(int j = 0;zhang && j < Index;j++){
                    if(c==b[j].index){
                        b[j].count++;
                        zhang = false;
                    }
                }
                if(zhang){
                    b[Index++].index = c;
                }
            }
    
            Sort(Index);
            for(int t = 0;t < Index;t++){
                cout<<b[t].index<<" "<<b[t].count<<endl;
            }
        }
        return 0;
    }
    View Code
    问题描述
    试题编号:    201503-3
    试题名称:    节日
    时间限制:    1.0s
    内存限制:    256.0MB
    问题描述:    
    问题描述
      有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日。
      现在,给你a,b,c和y1, y2(1850 ≤ y1, y2 ≤ 2050),希望你输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。
      提示:关于闰年的规则:年份是400的整数倍时是闰年,否则年份是4的倍数并且不是100的倍数时是闰年,其他年份都不是闰年。例如1900年就不是闰年,而2000年是闰年。
      为了方便你推算,已知1850年1月1日是星期二。
    输入格式
      输入包含恰好一行,有五个整数a, b, c, y1, y2。其中c=1, 2, ……, 6, 7分别表示星期一、二、……、六、日。
    输出格式
      对于y1和y2之间的每一个年份,包括y1和y2,按照年份从小到大的顺序输出一行。
      如果该年的a月第b个星期c确实存在,则以"yyyy/mm/dd"的格式输出,即输出四位数的年份,两位数的月份,两位数的日期,中间用斜杠“/”分隔,位数不足时前补零。
      如果该年的a月第b个星期c并不存在,则输出"none"(不包含双引号)。
    样例输入
    5 2 7 2014 2015
    样例输出
    2014/05/11
    2015/05/10
    评测用例规模与约定
      所有评测用例都满足:1 ≤ a ≤ 121 ≤ b ≤ 51 ≤ c ≤ 71850 ≤ y1, y2 ≤ 2050

    这道题是个死坑,搞了好久都不曾搞出来,被气的,伤心啊……

    问题描述
    试题编号:    201503-4
    试题名称:    网络延时
    时间限制:    1.0s
    内存限制:    256.0MB
    问题描述:    
    问题描述
      给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机、交换机与电脑之间使用网络连接。交换机按层级设置,编号为1的交换机为根交换机,层级为1。其他的交换机都连接到一台比自己上一层的交换机上,其层级为对应交换机的层级加1。所有的终端电脑都直接连接到交换机上。
      当信息在电脑、交换机之间传递时,每一步只能通过自己传递到自己所连接的另一台电脑或交换机。请问,电脑与电脑之间传递消息、或者电脑与交换机之间传递消息、或者交换机与交换机之间传递消息最多需要多少步。
    输入格式
      输入的第一行包含两个整数n, m,分别表示交换机的台数和终端电脑的台数。
      第二行包含n - 1个整数,分别表示第2、3、……、n台交换机所连接的比自己上一层的交换机的编号。第i台交换机所连接的上一层的交换机编号一定比自己的编号小。
      第三行包含m个整数,分别表示第1、2、……、m台终端电脑所连接的交换机的编号。
    输出格式
      输出一个整数,表示消息传递最多需要的步数。
    样例输入
    4 2
    1 1 3
    2 1
    样例输出
    4
    样例说明
      样例的网络连接模式如下,其中圆圈表示交换机,方框表示电脑:
    
      其中电脑1与交换机4之间的消息传递花费的时间最长,为4个单位时间。
    样例输入
    4 4
    1 2 2
    3 4 4 4
    样例输出
    4
    样例说明
      样例的网络连接模式如下:
    
      其中电脑1与电脑4之间的消息传递花费的时间最长,为4个单位时间。
    评测用例规模与约定
      前30%的评测用例满足:n ≤ 5, m ≤ 5。
      前50%的评测用例满足:n ≤ 20, m ≤ 20。
      前70%的评测用例满足:n ≤ 100, m ≤ 100。
      所有评测用例都满足:1 ≤ n ≤ 100001 ≤ m ≤ 10000
    问题描述
    试题编号:    201503-5
    试题名称:    最小花费
    时间限制:    4.0s
    内存限制:    256.0MB
    问题描述:    
    问题描述
      C国共有n个城市。有n-1条双向道路,每条道路连接两个城市,任意两个城市之间能互相到达。小R来到C国旅行,他共规划了m条旅行的路线,第i条旅行路线的起点是si,终点是ti。在旅行过程中,小R每行走一单位长度的路需要吃一单位的食物。C国的食物只能在各个城市中买到,而且不同城市的食物价格可能不同。
      然而,小R不希望在旅行中为了购买较低价的粮食而绕远路,因此他总会选择最近的路走。现在,请你计算小R规划的每条旅行路线的最小花费是多少。
    输入格式
      第一行包含2个整数n和m。
      第二行包含n个整数。第i个整数wi表示城市i的食物价格。
      接下来n-1行,每行包括3个整数u, v, e,表示城市u和城市v之间有一条长为e的双向道路。
      接下来m行,每行包含2个整数si和ti,分别表示一条旅行路线的起点和终点。
    输出格式
      输出m行,分别代表每一条旅行方案的最小花费。
    样例输入
    6 4
    1 7 3 2 5 6
    1 2 4
    1 3 5
    2 4 1
    3 5 2
    3 6 1
    2 5
    4 6
    6 4
    5 6
    样例输出
    35
    16
    26
    13
    样例说明
      对于第一条路线,小R会经过2->1->3->5。其中在城市2处以7的价格购买4单位粮食,到城市1时全部吃完,并用1的价格购买7单位粮食,然后到达终点。
    评测用例规模与约定
      前10%的评测用例满足:n, m ≤ 20, wi ≤ 20;
      前30%的评测用例满足:n, m ≤ 200;
      另有40%的评测用例满足:一个城市至多与其它两个城市相连。
      所有评测用例都满足:1 ≤ n, m ≤ 1051 ≤ wi ≤ 1061 ≤ e ≤ 10000
    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    极光推送 标签和别名设置说明
    极光推送集成遇到的坑
    iOS开发:创建推送开发证书和生产证书,以及往极光推送官网上传证书的步骤方法
    【大数据算法】蓄水池抽样算法
    【leetcode】Find Minimum in Rotated Sorted Array I&&II
    朴素贝叶斯算法的实例
    【leetcode】Min Stack -- python版
    朴素贝叶斯算法的python实现
    决策树的python实现
    kNN算法python实现和简单数字识别
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/4489128.html
Copyright © 2020-2023  润新知