第十届山东理工大学ACM网络编程擂台赛 重现

                                                                      IG !

                                                              Time Limit: 1000 ms Memory Limit: 65536 KiB

                                                                                               Submit Statisti

Problem Description

作为一名 lol 老玩家,lxw 听到 IG 夺冠后激动地不知道如何庆祝,想来想去决定让你分别用' N '和 ' B '两个字符打印"IG"。

用' N '来打印' I ',用' B ' 来打印 ' G '。

给定' I '和' G '的高度、宽度以及间隔。

Input

输入包括三个正整数h,w,x分别表示'I'和'G'单词的高度、宽度以及间隔。

7 <= h , l <= 29

1 <= x <= 10

输入保证h和l均为奇数(为了方便确定' I '中的竖线位置和' G '中短横线的位置 )。

Output

打印的 IG 图形。

Sample Input

9 9 3

Sample Output

NNNNNNNNN   BBBBBBBBB
    N       B
    N       B
    N       B
    N       B    BBBB
    N       B       B
    N       B       B
    N       B       B
NNNNNNNNN   BBBBBBBBB

Hint

注意:

1.'G' 中短线的长度为w/2(向下取整)。

2.行末不要输出任何多余的空格,样例输出中每一行的字符数并不相等。

Source

lxw

【分析】:这是一类图形打印的题,找规律,逐行打印;

Result: Accepted
Take time: 0ms
Take Memory: 248KB

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n,m,h;
    while(cin>>n>>m>>h)
    {
        for(int k=0; k<n; k++)
        {
            if(k==0||k==n-1)   //第一行与最后一行相同;
            {
                for(int i=0; i<m; i++)
                {
                    printf("N");
                }
                for(int i=0; i<h; i++)
                {
                    printf(" ");
                }
                for(int i=0; i<m; i++)
                {
                    printf("B");
                }

            }
            else if(k<n-1)   //
            {
                for(int i=0;i<m+h;i++)
                {
                    if(i==m/2)
                    {
                        printf("N");
                    }
                    else
                    {
                        printf(" ");
                    }
                }
                printf("B");
                if(k==n/2)
                {
                    for(int i=0;i<m/2;i++)
                    {
                        printf(" ");
                    }
                    for(int i=0;i<m/2;i++)
                    {
                        printf("B");
                    }
                }
                else if(k>n/2)
                {
                    for(int i=0;i<m-2;i++)
                    {
                        printf(" ");
                    }
                    printf("B");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

                                                                 竹鼠养殖

                                                             Time Limit: 1000 ms Memory Limit: 65536 KiB

                                                                                        Submit Statistic

Problem Description

众所周知,华农兄弟喜欢养殖竹鼠。他们的养殖厂里总共有n只竹鼠,他们非常疼爱自己家的竹鼠

华农兄弟总共贮存了m个竹片,每根竹片有他们所属的种类。
竹鼠为了避免因吃的太多,被华农兄弟做成烤竹鼠,所以每天只吃一个竹片。


同时,为了防止自己吃坏肚子,所以每只竹鼠只吃同一类竹子。(不同的竹鼠可以吃相同类别的竹子)
现在华农兄弟想知道,自己贮存的竹片最多能够同时喂养这n只竹鼠多少天。他们觉得你很" 漂亮 ",所以决定请你帮忙解决这个问题。

Input

第一行包含两个整数 n 和 m(1 ≤ n ≤ 100,1 ≤ m ≤ 100)——竹鼠的数目和竹片数量。

第二行包含整数序列 a1、a2、…、am ( 1 ≤ ai ≤ 100 ) ,其中 ai 是第i个竹片的类型。

Output

输出贮存的竹片最多能够同时喂养n只竹鼠多少天,假设一天都不可能,输出0。

Sample Input

4 10
1 5 2 1 1 1 2 5 7 2

Sample Output

2

Hint

有4只竹鼠,10个竹片。

其中' 1 '类竹片共4个, ' 2 ' 类竹片共3个,' 5 '类竹片共2个,' 7 '类竹片共1个。

一种最优的方案是:让第一只和第二只竹鼠吃' 1 '类竹片,让第三只竹鼠吃' 2 '类竹片,让第四只竹鼠吃' 5 '类竹片,这样最多能够同时喂养这n只竹鼠2天。

Source

lxw

【分析】:这是一个枚举题?,该题分两步:第一步,统计每种竹片的总数,第二步,从每天所有竹鼠都吃一个开始,依次增加,循环判断是否可提供给n只竹鼠;枚举的时候可以向下二分优化(?),后期我会附上(优化代码)代码;

Result: Accepted
Take time: 0ms
Take Memory: 196KB



#include <bits/stdc++.h>
using namespace std;
int A[110];
int main()
{
    int n,m;
    int x;
    while(~scanf("%d %d",&n,&m))
    {
        int ans=0,tmp;
        memset(A,0,sizeof(A));//累加计数要清零;
        for(int i=0;i<m;i++)  //统计每种鼠片的总数;
        {
            scanf("%d",&x);
            A[x]++;                     
        }
        for(int i=1;;i++)  //枚举这些鼠片够n只竹鼠吃多少天,
        {
            tmp=0;
            for(int j=0;j<=100;j++)
            {
                tmp+=A[j]/i;
            }
            if(tmp>=n)
            {
                ans=i;
            }
            else
                {
                    break;
                }

        }
        printf("%d\n",ans);
    }
    return 0;
}

 

                                                      EL PSY CONGROON

                                                       Time Limit: 1000 ms Memory Limit: 65536 KiB

                                                                                      Submit Statistic

Problem Description

 我是疯狂科学家——凤凰院凶真!欺骗世界这种事情,简直是小菜一碟!哇哈哈哈哈哈哈哈!让我再宣布一次吧!我是疯狂科学家——凤凰院凶真!你的AC就在我掌中。

  冈部伦太郎(自称“凤凰院凶真”)有一个伟大的发明——“微波炉(待定)”,就是一个可以向过去发送邮件的“时间机器”,可是最多只能向过去三天发送邮件。这一天动漫“命运石之门”开播了,可是红莉牺(冈部伦太郎的好友)不小心错过了“命运石之门”的首映,于是红莉牺希望向过去的自己发送邮件,提醒自己千万别错过首映。已知红莉牺现在处在y年m月n日a时b分,她将向过去k小时发送邮件,她希望知道她的邮件发往了哪个时间点。如果你能告诉她正确的答案,那么红莉牺就会让冈部伦太郎送你一个AC。

Input

    第一行包含一个数字 t,代表输入组数。(0 <  t < 100 )

     第二行包含 5 个数字y、m、n、a、b,分别代表年、月、日、小时、分钟(本题采用24小时进制)。   

  (2000 < y < 4000, 1 <= m <= 12, 1 <= n <= 31,0 <= a <= 23,0 <= b <= 59)

     从第三行输入一个数字 k,代表 k 小时后。( 0 <= k <= 72)

     输入保证结果都在 int 范围内。

Output

    对于每组数据,输出五个整数代表k小时前是几年几月几日几时几分,年保证都是四位数,月日时分为两位数,不足两位在前面补零。

输出格式为:年/*^*\月/*^*\日/*^*\时/*^*\分,详情见下方样例。

Sample Input

2
2018 01 01 00 00
2
2008 03 01 00 00
3

Sample Output

2017/*^*\12/*^*\31/*^*\22/*^*\00
2008/*^*\02/*^*\29/*^*\21/*^*\00

Hint

Source

幸不敷衍笑与哭

【分析】这是一道时间逻辑题,建议把n个小时分成多少天+多少小时的i形式,便于逻辑推理倒叙时间;

Result: Accepted
Take time: 0ms
Take Memory: 188KB



#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int rn(int y)     //判断闰年
{
    if(y%400==0||y%100!=0&&y%4==0)
        return 1;
    return 0;
}
int ts(int y,int m)  //返回y年m月的天数;
{
    if(m==2&&rn(y))
        return 29;
    if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
        return 31;
    if(m==2)
        return 28;
    return 30;

}
int main()
{

      //24小时制,00:00~23:59;时间与月天的进制分别对应清楚
      //假设该题要求12小时制,不妨先以24小时制算出答案后在进行转化
     int t;
     int y,m,d,hour,Min;
     int x;
     int day,s;
     scanf("%d",&t);
     while(t--)
     {
         scanf("%d %d %d %d %d",&y,&m,&d,&hour,&Min);
         scanf("%d",&x);
         day=x/24;
         s=x%24;
         if(day)
         {
             i
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值