NBUT 1219 Time

  • [1219] Time

  • 时间限制: 1000 ms 内存限制: 131072 K
  • 问题描述
  • Digital
    clock use 4 digits to express time, each digit is described by 3*3 characters (including”|”,”_”and” “).now given the current time, please tell us how can it be expressed by the digital clock.

  • 输入
  • There are several test cases.

    Each case contains 4 integers in a line, separated by space.

    Proceed to the end of file.

  • 输出
  • For each test case, output the time expressed by the digital clock such as Sample Output.
  • 样例输入
  • 1 2 5 6
    2 3 4 2
  • 样例输出
  •     _  _  _
      | _||_ |_
      ||_  _||_|
     _  _     _
     _| _||_| _|
    |_  _|  ||_ 
  • 提示
  • The digits showed by the digital clock are as follows:
       _  _     _  _  _  _  _  _
     | _| _||_||_ |_   ||_||_|| |
     ||_  _|  | _||_|  ||_| _||_|
  • 来源
  • 辽宁省赛2010

    题目意思也很简单就是用字符串模拟时钟,注意每个数字占三格,最暴力的方法就是直接定义三个字符数组,按要求输出,还有一点就是0在最后一位,要特殊处理一下。

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <cmath>
    #include <ctime>
    #include <queue>
    #include <stack>
    #include <set>
    #include <map>
    using namespace std;
    typedef long long LL;
    const int maxn= 100000 + 10;
    
    char s1[35]="     _  _     _  _  _  _  _  _ ";
    char s2[35]="   | _| _||_||_ |_   ||_||_|| |";
    char s3[35]="   ||_  _|  | _||_|  ||_| _||_|";
    int main() {
        int a,b,c,d;
        while(~scanf("%d%d%d%d",&a,&b,&c,&d))
        {
            getchar();
            if(a==0)
                a=10;
            if(b==0)
                b=10;
            if(c==0)
                c=10;
            if(d==0)
                d=10;
            printf("%c%c%c%c%c%c%c%c%c%c%c%c\n",s1[a*3-2],s1[a*3-1],s1[a*3],s1[b*3-2],s1[b*3-1],s1[b*3],s1[c*3-2],s1[c*3-1],s1[c*3],s1[d*3-2],s1[d*3-1],s1[d*3]);
            printf("%c%c%c%c%c%c%c%c%c%c%c%c\n",s2[a*3-2],s2[a*3-1],s2[a*3],s2[b*3-2],s2[b*3-1],s2[b*3],s2[c*3-2],s2[c*3-1],s2[c*3],s2[d*3-2],s2[d*3-1],s2[d*3]);
            printf("%c%c%c%c%c%c%c%c%c%c%c%c\n",s3[a*3-2],s3[a*3-1],s3[a*3],s3[b*3-2],s3[b*3-1],s3[b*3],s3[c*3-2],s3[c*3-1],s3[c*3],s3[d*3-2],s3[d*3-1],s3[d*3]);
        }
        return 0;
    }
    

    这是最开始写的纯暴力方法,看上去好不协调啊…+_+…

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <cmath>
    #include <ctime>
    #include <queue>
    #include <stack>
    #include <set>
    #include <map>
    using namespace std;
    typedef long long LL;
    const int maxn= 100000 + 10;
    
    char  s[3][35]= {"     _  _     _  _  _  _  _  _ ",
                     "   | _| _||_||_ |_   ||_||_|| |",
                     "   ||_  _|  | _||_|  ||_| _||_|"
                    };
    int a[4];
    int main() {
        while(~scanf("%d",&a[0])) {
            for(int i=1; i<4; i++)
                scanf("%d",&a[i]);
            for(int i=0; i<4; i++)
                if(!a[i])
                    a[i]+=10;
            for(int i=0; i<3; i++) {
                for(int j=0; j<4; j++)
                {
                    int t=a[j];
                    printf("%c%c%c",s[i][t*3-2],s[i][t*3-1],s[i][t*3]);
                }
                puts("");
            }
        }
        return 0;
    }
    

    O(∩_∩)O哈哈~这样看上去清爽多了吧。

    还有一种比较屌的方法,是照着基神的代码敲的(真不知道基神脑袋怎么长的,就是跟常人思维不一样……好吧…%>_<%…其实不可否认的还是自己太愚笨…Orz),虽然本人目前没看懂,但还是贴上来把,求大神赐教^_^

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <cmath>
    #include <ctime>
    #include <queue>
    #include <stack>
    #include <set>
    #include <map>
    using namespace std;
    typedef long long LL;
    const int maxn= 100000 + 10;
    
    char  s[50][50];
    int data[]={119,36,93,109,46,107,123,37,127,111};
    
    int slove(int p,int x)
    {
        x=data[x];
        if(x>>0&1)s[0][p+1]='_';
        if(x>>1&1)s[1][p+0]='|';
        if(x>>2&1)s[1][p+2]='|';
        if(x>>3&1)s[1][p+1]='_';
        if(x>>4&1)s[2][p+0]='|';
        if(x>>5&1)s[2][p+2]='|';
        if(x>>6&1)s[2][p+1]='_';
    }
    
    int main() {
        int a[5];
        while(~scanf("%d",&a[0])) {
            for(int i=1; i<4; i++)
                scanf("%d",&a[i]);
            memset(s,' ',sizeof(s));
            for(int i=0;i<3;i++)
                s[i][12]=0;
            for(int i=0;i<4;i++)
                slove(i*3,a[i]);
            for(int i=0;i<3;i++)
                printf("%s\n",s[i]);
        }
        return 0;
    }
    

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 19:05:37

NBUT 1219 Time的相关文章

NBUT 1219 Time(三维数组)

题目链接:https://ac.2333.moe/Problem/view.xhtml?id=1219 #include<iostream> #include<cstdio> using namespace std; char numb[11][3][3]= {{{' ','_',' '},{'|',' ','|'},{'|','_','|'}}, {{' ',' ',' '},{' ',' ','|'},{' ',' ','|'}}, {{' ','_',' '},{' ','_

ural 1219. Symbolic Sequence

1219. Symbolic Sequence Time limit: 1.0 secondMemory limit: 64 MB Your program is to output a sequence of 1 000 000 lowercase Latin letters. This sequence should satisfy the following restrictions: Every letter occurs not more than 40 000 times in th

ACM: NBUT 1105 多连块拼图 - 水题 - 模拟

NBUT 1105  多连块拼图 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format: Practice Appoint description:  System Crawler  (Aug 12, 2016 9:32:14 AM) Description 多连块是指由多个等大正方形边与边连接而成的平面连通图形. -- 维基百科 给一个大多连块和小多连块,你的任务是判断大多连块是否可以由两个这样的小多连块拼成.小多连块只能

HDU 1219: AC Me

HDU 1219: AC Me ///@author Sycamore, ZJNU ///@accepted_on 2017-01-24 #include<iostream> #include<string> #include <algorithm> using namespace std; int main() { string s; while (getline(cin, s)) { for (int i = 0; i < 26; i++) { cout &l

NBUT 1525 Cow Xor(01字典树+前缀思想)

[1525] Cow Xor 时间限制: 2000 ms 内存限制: 65535 K 问题描述 农民约翰在喂奶牛的时候被另一个问题卡住了.他的所有N(1 <= N <= 100,000)个奶牛在他面前排成一行(按序号1..N的顺序),按照它们的社会等级排序.奶牛#1有最高的社会等级,奶牛#N最低.每个奶牛同时被指定了一个不唯一的附加值,这个数在0..2^21 - 1的范围内. 帮助农民约翰找出应该从哪一头奶牛开始喂,使得从这头奶牛开始的一个连续的子序列上,奶牛的附加值的异或最大. 如果有多个这

NBUT 1186 Get the Width(DFS求树的宽度,水题)

[1186] Get the Width 时间限制: 1000 ms 内存限制: 65535 K 问题描述 It's an easy problem. I will give you a binary tree. You just need to tell me the width of the binary tree. The width of a binary tree means the maximum number of nodes in a same level. For exampl

ACM: NBUT 1107 盒子游戏 - 简单博弈

NBUT 1107  盒子游戏 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format: Practice Appoint description:  System Crawler  (Aug 13, 2016 10:35:29 PM) Description 有两个相同的盒子,其中一个装了n个球,另一个装了一个球.Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作每次操作时,游戏者先看看

NBUT 1457 Sona (莫队算法)

题目大意: 求一段区间内 出现的数字的次数的三次方的和 思路分析: 这要水过去的题目真是难,各种优化. 不能用map , 要离散化之后 先处理lowerbound.优化输入... 时间卡的很紧.. 题目直接用莫队水过去. 如果你超时的话,不妨试试上面三种优化. #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <map> #

NBUT 2014 B Beautiful Walls

题目链接:http://acm.nbut.edu.cn/Contest/view/id/70/problem/B.xhtml 题意:给出n(n≤100000 )个正整数,考虑这个序列的连续的子序列的个数,将含有两个以上相同数字的子序列排除在外,将不同位置的相同序列算作两种,问这样的序列有多少个?为了便于描述,将这种序列称为W序列. 输入格式:每个样例首先输入正整数的个数n,然后是n个正整数,有多组样例 输出所求序列的个数 样例输入 5 3 4 5 5 2 3 1 2 3 样例输出 9 6 分析: