目录
公司的Logo
为了感谢河南省八六三软件有限公司对战疫杯ACM在线程序设计竞赛的大力支持,小Y决定为公司制作个logo。
logo通常要用在各种不同的场景,因此logo的尺寸必须是可变的。现给你原始的logo,以及其改变尺寸的例子,你能寻找规律并输出任意缩放后的logo图案吗?
原始logo:
### ### ### # # # # ### ### ### # # # # # ### ### ###
将其放大一倍的示例:
#### #### #### # # # # # # # # #### #### #### # # # # # # # # # # #### #### ####
其放大两倍的示例是
##### ##### ##### # # # # # # # # # # # # ##### ##### ##### # # # # # # # # # # # # # # # ##### ##### #####
输入格式:
输入一个整数n(0≤n≤10),表示放大的倍数。特别的,n等于0时输出原字符画。
输出格式:
输出对应倍数的字符画。
输入样例:
1
输出样例:
#### #### #### # # # # # # # # #### #### #### # # # # # # # # # # #### #### ####
代码长度限制
16 KB
时间限制
1000 ms
内存限制
64 MB
思路or题解:
模拟
AC代码如下:
#include <bits/stdc++.h>
#define buff \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0)
using namespace std;
int n;
int main()
{
buff;
cin >> n;
int base = 3 + n;
for (int i = 1; i <= base; i++)
cout << '#';
cout << ' ';
for (int i = 1; i <= base; i++)
cout << '#';
cout << ' ';
for (int i = 1; i <= base; i++)
cout << '#';
cout << endl;
//-----------
for (int i = 1; i <= n + 1; i++)
{
cout << '#';
for (int j = 1; j <= n + 1; j++)
cout << ' ';
cout << '#';
cout << ' ';
cout << '#';
for (int j = 1; j <= 5 + 2 * n; j++)
cout << ' ';
cout << '#' << endl;
}
//-----------
for (int i = 1; i <= base; i++)
cout << '#';
cout << ' ';
for (int i = 1; i <= base; i++)
cout << '#';
cout << ' ';
for (int i = 1; i <= base; i++)
cout << '#';
cout << endl;
//------------
for (int i = 1; i <= n + 1; i++)
{
cout << '#';
for (int j = 1; j <= n + 1; j++)
cout << ' ';
cout << '#';
cout << ' ';
cout << '#';
for (int j = 1; j <= n + 1; j++)
cout << ' ';
cout << '#';
for (int j = 1; j <= n + 3; j++)
cout << ' ';
cout << '#' << endl;
}
//------------
for (int i = 1; i <= base; i++)
cout << '#';
cout << ' ';
for (int i = 1; i <= base; i++)
cout << '#';
cout << ' ';
for (int i = 1; i <= base; i++)
cout << '#';
cout << endl;
}
解封日期
小明所在的城市发生了疫情,实行静态化管理,小明也被关在家里,不能去上学了。
根据当地政策,连续N天没有新增病例,就可以解封。小明知道过去M(M≤N)天的每天的新增病例数,他想知道理想情况下最早什么时候可以解封。
输入格式:
第一行一个日期,格式为YYYY/MM/DD。
第二行两个整数N和M,0<M≤N≤30。
之后M行,每行一个整数0≤Xi≤100,0≤i<M,表示从今天开始,往过去数第i天的新增病例数(包括今天)。
输出格式:
一行,一个日期,格式为YYYY/MM/DD,请不要有多余的空格。
输入样例:
2004/10/28 4 2 1 0
输出样例:
2004/11/01
代码长度限制
16 KB
时间限制
1000 ms
内存限制
64 MB
思路or题解:
模拟。
确定还需要过多少天解封,跑暴力找到这一天!(需要分平年and闰年)
ps:测试数据有点水
AC代码如下:
#include <bits/stdc++.h>
#define buff \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0)
using namespace std;
int year, month, day;
int n, m;
int s[1009];
int r[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int p[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool is_r(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return true;
else
return false;
}
int main()
{
//buff;
scanf("%d/%d/%d", &year, &month, &day);
cin >> n >> m;
int idx = 0;
for (int i = 1; i <= m; i++)
{
cin >> s[i];
}
for (int i = 1; i <= m; i++)
{
if (s[i] == 0)
idx++;
else
break;
}
int ne = n - idx;
//cout << ne << " **** " << endl;
while (ne)
{
if (is_r(year))
{
if (r[month] - day < ne)
{
int tt = r[month] - day;
ne -= tt;
day = 1;
month++;
ne--;
if (month > 12)
{
month = 1;
year++;
}
}
else
{
day += ne;
ne = 0;
}
}
else
{
if (p[month] - day < ne)
{
int tt = p[month] - day;
ne -= tt;
day = 1;
month++;
ne--;
if (month > 12)
{
month = 1;
year++;
}
}
else
{
day += ne;
ne = 0;
}
}
}
if (year >= 1000)
cout << year;
else if (year >= 100)
cout << 0 << year;
else if (year >= 10)
cout << "00" << year;
else
cout << "000" << year;
cout << "/";
if (month < 10)
cout << 0;
cout << month << "/";
if (day < 10)
cout << 0;
cout << day << endl;
}
语音设备是否正常?
因疫情防控改为线上授课后,有些同学开始沉迷游戏。你的寝室有个室友最近喜欢了一款游戏:Hxxxxx Dxxxx。该游戏能够正常进行的重要前提就是所有玩家的语音输入设备都是正常的,即每个玩家需要通过麦克风与其他玩家交流。该游戏有8种角色,每人进入游戏房间时需要不重复地选择一种角色,游戏房间满8人后,房主可以正常开启本局游戏。玩家进入房间后,通常需要通过语音与其他玩家交流,以证明自己的麦克风设备是正常的。作为房主,需要时刻了解当前进入房间的其他玩家是否通过麦克风交流过,进而决定是否开启本局游戏,或者踢出没有说过话的玩家。你的室友作为房主,你能通过程序设计帮助他这个忙吗?另外,房主保证自己的设备是没问题的。
说明:该游戏中的8中角色分别为船长(Captain), 牧师(Priest),厨师(Cook),医生(Doctor),工程师(Engineer),猎人(Hunter),枪手(Gunner), 导航官(Navigator)。
后记:帮助完房主设计完这个程序后,你愈发觉得作为一个计算机专业的学生,应该去尝试编程写一个游戏赚别人钱,而不是浪费时间还花钱玩游戏。从此你一发而不可收拾,游戏编程界的一颗新星冉冉升起!
输入格式:
第一行一个字符串,表示房主建立房间所选择的角色;
第二行一个正整数N,0<N≤1000,表示语音的条数;
以下N行字符串,每一行都是形如:角色: XXX XXX XXX XX
表示哪个角色通过语音说了什么话。中间是英文冒号,每行字符串长度不超过200。
输出格式:
如果所有玩家设备均正常,输出"Ready"(不包括引号);否则输出没有语音交流过的玩家角色名,每行一个(按照角色单词的字典序从小到大依次输出)。
输入样例1:
Captain 10 Hunter:Hi. Navigator:Hello, everyone Doctor:here is the doctor. Priest:voice test Hunter:is my device ready? Captain: yes Cook:chu shi you mai Gunner:of course Engineer: i'm ready Gunner: go go
输出样例1:
Ready
输入样例2:
Priest 7 Hunter:Hi. Engineer: i'm ready Navigator:Hello, everyone Doctor:here is the doctor. Hunter: is my device ready? Gunner:of course Gunner: how about the cook?
输出样例2:
Captain Cook
代码长度限制
16 KB
时间限制
1000 ms
内存限制
64 MB
思路or题解 :
模拟。
记录出现的不同角色and个数,num==8就可以开游戏了,否则扫一遍看看哪个职业不在,扔数组里面排序输出。
AC代码如下:
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#define buff \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0)
using namespace std;
string home;
map<string, int> m;
int num = 0;
string a;
string qq[100];
void init()
{
m["Captain"] = 1;
m["Priest"] = 1;
m["Cook"] = 1;
m["Doctor"] = 1;
m["Engineer"] = 1;
m["Hunter"] = 1;
m["Gunner"] = 1;
m["Navigator"] = 1;
}
string cnt(int idx)
{
string ans;
for (int i = 0; i <= idx; i++)
ans += a[i];
return ans;
}
int main()
{
//buff;
cin >> home;
m[home] = 1;
num++;
int n;
cin >> n;
getchar();
for (int i = 1; i <= n; i++)
{
getline(cin, a);
// if(i == 1)
// continue;
//cout << a <<" *** \n";
int len = a.size();
int idx = 0;
for (int j = 0; j < len; j++)
{
if (a[j] == ':')
{
idx = j - 1;
break;
}
}
string peo = cnt(idx);
if (!m[peo])
{
m[peo] = 1;
num++;
}
}
// cout << "*** " << num << endl;
if (num == 8)
cout << "Ready" << endl;
else
{
int cnt = 0;
if (!m["Captain"])
qq[cnt++] = "Captain";
if (!m["Priest"])
qq[cnt++] = "Priest";
if (!m["Cook"])
qq[cnt++] = "Cook";
if (!m["Doctor"])
qq[cnt++] = "Doctor";
if (!m["Engineer"])
qq[cnt++] = "Engineer";
if (!m["Hunter"])
qq[cnt++] = "Hunter";
if (!m["Gunner"])
qq[cnt++] = "Gunner";
if (!m["Navigator"])
qq[cnt++] = "Navigator";
sort(qq, qq + cnt);
for (int i = 0; i < cnt; i++)
cout << qq[i] << endl;
}
}