IG !
Time Limit: 1000 ms Memory Limit: 65536 KiB
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
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
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