zoukankan      html  css  js  c++  java
  • hpu校赛题目

    问题 B: 感恩节KK专场——特殊的比赛日期

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 397  解决: 103
    [提交][状态][讨论版]

    题目描述

    KK今天参加河南理工大学ACM程序设计竞赛,他发现今天是11月29号,刚好11和29都是素数(只能被1和自己本身整除的数叫做素数),于是他想知道今年(2015年)的某天之前(不含当天)一共有多少天是月份和天数都是素数。

    输入

    第一行输入一个整数t(1<t<366),代表t组测试数据。

    接下来每行输入一个日期,仅包含(月份和天数),格式形如(yy-dd)。

    输入时保证日期全部属于合法日期。

    输出

    输入yy-dd天之前有多少天的日期同时满足yy和dd同时为素数。

    样例输入

    3
    2-2
    2-5
    2-15
    

    样例输出

     0
     2
     6
    
    打表, 可以说是个判断素数, 感觉挺好一题。
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int num[31];
    int RE[13];
    int year[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 
    void dabiao(){
        int total = 1, sum = 0;
        memset(num, 0, sizeof(num));
        num[2]=num[3]=num[5]=num[7]=num[11]=num[13]=num[17]=num[19]= num[23]=num[29]=num[31]=1;
        for(int i = 1; i <= 12; i++)
        {
            for(int j = 1; j <= year[i]; j++)
                if(num[i]&&num[j])
                    sum++;
            RE[i] = sum;
            sum = 0;
        }
    } 
    int main(){
        dabiao();
        int t;
        scanf("%d", &t);
        while(t--){
            int a, b;
            scanf("%d-%d", &a, &b);
            int OP = 0;
            for(int i = 1; i <= a-1; i++)
                OP += RE[i];
            for(int i = 1; i < b; i++)
                OP = OP + num[a]*num[i]; 
            printf("%d
    ", OP);  
        } 
        return 0;
    } 
    View Code

    问题 D: 感恩节KK专场——2015年的第一场雪

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 889  解决: 84
    [提交][状态][讨论版]

    题目描述

    下雪了,KK学长站在三教门口,看学弟学妹们堆雪人。突然KK学长发现一个神奇的规律:春秋大道上能被k整除的位置都会有一个雪人。现在KK学长想知道春秋大道的[x, y]区间里面有多少个雪人。

    输入

    给定一个整数t,表示有t(t<=6000)组测试数据。每组测试数据有三个整数k(k非0且|k|<=2^30),x,y(x<=y且|x|,|y|<=2^30)。

    输出

    每行输出一个整数,表示雪人的个数。

    样例输入

    1
    1 1 2

    样例输出

    2
    这题好, 数学题。 分开闭区间和区间端点含0来讨论。
    #include <cstdio>
    using namespace std;
    int main(){
        int t;
        scanf("%d", &t);
        while(t--){
            long long sum; 
            long long k, a, b;
            scanf("%lld%lld%lld", &k, &a, &b);
            long long c, d;
            if(a < 0)
                c = a*(-1);
            else
                c = a;
            if(b < 0)
                d = b*(-1);
            else
                d = b;
            if(k < 0)
                k *= -1;
            long long  e, f;
            e = c/k;
            f = d/k;
            printf("%lld %lld
    ", e, f);
            if(a < 0 && b > 0){
                printf("%lld
    ", e+f+1);
                continue;
            }
            if(a > 0){
                sum = f - e;
                if(c % k == 0)
                    sum += 1;
                printf("%lld
    ", sum);
                continue; 
            }
            if(b < 0){
                sum = e - f;
                if(d % k == 0)
                    sum += 1;
                printf("%lld
    ", sum);
                continue;        
            }
            if(a == 0 && b == 0){
                printf("1
    ");
                continue;
            }
            if(a == 0){
                printf("%lld
    ", f+1);
                continue;
            }
            if(b == 0){
                printf("%lld
    ", e+1);
                continue;
            }
        }
        return 0;
    }
    View Code

    问题 G: 感恩节KK专场——与学妹滑雪

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 341  解决: 41
    [提交][状态][讨论版]

    题目描述

    这周下的雪好大好大,不过这正和KK学长之意。因为他要去陪学妹滑雪,谁知调皮的学妹要和KK比赛,无奈的KK只能应战。已知比赛场地有n个站点,m条路线。比赛起点是第一个站点,终点是第n个站点,先到达终点的人是胜者(如果KK和学妹同时到,KK会认输)。现在KK为了显示学长风范,决定让学妹先滑T秒。但是到了比赛的时候,KK就有点后悔了。已知学妹到达终点需要时间Tg秒,KK每秒可以滑k米。现在问你KK在最优情况下能否赢得比赛。

    输入

    给定一个整数t,表示有t(t<=20)组测试数据。每组测试数据有两个整数n(1<=n<=1000),m(1<=m<=10000),接下来m行表示路线,每行三个整数a,b,c分别表示路线起点,终点,长度。最后一行有两个个整数T(1<=T<=10),Tg(1<=Tg<=10000)和一个实数k(0<=k<=200)表示上面提到的信息。

    输出

    若KK可以获胜输出"Good job,KK!",否则输出"What a pity!"。输出占一行。

    样例输入

    1
    2 1
    1 2 3
    1 1 1

    样例输出

    What a pity!

    提示

    要求精度>=1e-3

    最短路的应用吧, 有个提示要求内容得好好看看。

    #include <cstdio>
    #include <cstring>
    #define N 1001
    using namespace std;
    int map[N][N], vis[N], dis[N];
    const int INF = 0x3f3f3f3f;
    int n, m;
    void init(){
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
                map[i][j] = (i==j?0:INF);
    }
    void Dijkstra(){
        memset(vis, 0, sizeof(vis));
        for(int i = 1; i <= n; i++)
            dis[i] = map[1][i];
        vis[1] = 1; 
        for(int i = 1; i < n; i++){
            int temp = 1, min = INF;
            for(int j = 1; j <= n; j++){
                if(!vis[j] && dis[j] < min){
                    min = dis[j];
                    temp = j;
                }        
            }
            vis[temp] = 1;
            for(int j = 1; j <= n; j++)
                if(!vis[j] && dis[j] > dis[temp] + map[temp][j])
                    dis[j] = dis[temp] + map[temp][j];
        } 
    }
    int main(){
        int t;
        scanf("%d", &t);
        while(t--){
             scanf("%d%d", &n, &m);
             init();
             for(int i = 0; i < m; i++){
                 int a, b, c; 
                 scanf("%d%d%d", &a, &b, &c);
                 if(map[a][b] > c)
                     map[a][b] = map[b][a] = c;
            }
            int z, x;  double c;
            scanf("%d%d%lf", &z, &x, &c);
            /* if(n == 1){
                printf("What a pity!
    ");
                continue;
            } */
            Dijkstra();
            int ans = dis[n];
            if((x-z)*c - (double)ans <= 0.001)
                printf("What a pity!
    ");
            else
                printf("Good job,KK!
    "); 
        } 
        return 0;
    } 
    View Code

    问题 H: 感恩节KK专场——陪学妹上课

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 49  解决: 23
    [提交][状态][讨论版]

    题目描述

    KK和学妹一起去上线性代数课,号称“数学小王子”的KK,听数学课就犯困,为了使KK不睡觉,学妹决定给KK玩一个游戏,来激发KK。

    游戏是这样的:给出一个N*N的矩阵,矩阵中分别填入1--N*N个数字,不允许重复,使得矩阵中每行、每列以及每条对角线上的数字之和,全部相等。

    为了降低难度,学妹告诉KK,每组测试数据的第一行的正中间的数字一定为1。数据保证N为奇数。

    输入

    给定一个整数t(0<t<1000),表示有t组测试数据。

    每组测试数据有一个奇数N(0<N<200),表示填上N*N个数字。

    输出

    每组测试数据输出一个N*N的矩阵,每个数字占8位,右对齐,具体格式见输出样例。

    样例输入

    2
    3
    5
    

    样例输出

           8       1       6
           3       5       7
           4       9       2
          17      24       1       8      15
          23       5       7      14      16
           4       6      13      20      22
          10      12      19      21       3
          11      18      25       2       9
    

    提示

    没解出来。

    问题 J: 感恩节KK专场——KK当老板

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 62  解决: 1
    [提交][状态][讨论版]

    题目描述

    KK学长发财了,于是他决定投身房地产,他想开一个高级宾馆,有一个计划,给宾馆留出1平方米的位置当做前台接待处,其他地方建立N个相同大小的面积为X^2(X为正整数)的房间。KK喜欢正方形,于是他决定买一块边长为Y的地,那么Y多大时才能满足KK的想法?

    输入

    给定一个整数t(1<=t<=1000),表示有t组测试数据.

    每组测试数据有一个整数N(1<=N<=1000),代表修建N个房间。

    输出

    每组数据输出一行,输出满足要求的最小Y值。如果Y值不存在,输出“no solution”。

    样例输入

    3
    1
    2
    3
    

    样例输出

    no solution
    3
    2
    

    提示

    N=2时,x可以为2,此时Y=3;

    N=3时,x可以为1,此时Y=2;

    应该也是个规律题。

  • 相关阅读:
    linux解压 tar命令
    kernel部分数据结构列表二(超级块)
    Linux QQ 的安装
    怎么把uclinux下载到EPCS中
    CentOS 5 上安装git
    【转】Linux下使用Evolution收发Email
    几个采样代码的对比
    NIOS II 安装uclinux的硬件要求
    S3C2440 Timer初始化方法
    基于NIOS II的液晶显示设计——ucGUI移植
  • 原文地址:https://www.cnblogs.com/soTired/p/5011460.html
Copyright © 2011-2022 走看看