4题全为 :暴力/模拟
目录
我的账本当前疫情防控形势严峻,学校为了减少同学们因为吃饭造成的聚集,规定一个寝室每次派个代表出去买饭,小W寝室的6人(编号1-6)决定每次抽签派一个人去买6份同样的套餐。但是每次买完饭后立刻转账又比较麻烦,于是他们约定每次去买饭的人先垫付,等疫情结束后再统一结算。 现在给你宿舍封闭管理期间的n顿饭中每次买饭人的序号和每份饭的单价,问疫情结束后每个人关于饭钱的收支状况? 输入格式:第一行一个正整数n,表示有n顿饭 输出格式:一行六个整数表示每个人欠别人的钱或者别人欠他的钱。 输入样例: 输出样例: 注意行末不能有多余空格 样例解释11号欠2号5元,不欠3号,4号、5号、6号各欠1号5元,故1号输出10 数据范围与提示1≤n≤21 代码长度限制 16 KB 时间限制 1000 ms 内存限制 64 MB |
AC代码如下:
#include <bits/stdc++.h>
#define buff \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0)
#define int long long
using namespace std;
int n;
int s[100];
signed main()
{
buff;
cin >> n;
for (int i = 1; i <= n; i++)
{
int x, y;
cin >> x >> y;
for (int j = 1; j <= 6; j++)
{
if (j == x)
s[j] += 5*y;
else
s[j] -= y;
}
}
for (int i = 1; i <= 6; i++)
{
if(i != 6)
cout << s[i] << ' ';
else
cout << s[i] <<endl;
}
}
核酸检测扫码
受疫情影响,小明同学现在每天需要下楼进行核酸检测。检测时,需要先用郑好办 APP 扫描二维码并填写个人信息以便统计核酸检测结果。
小明对于二维码的构造很是好奇。据了解,二维码中的黑白可以用来表示二进制中的 0/1 。且二维码的左上角,右上角,左下角有三个形态固定的特殊方阵,用做扫码时的位置标定。通过确定这三个特殊方阵的位置,进而确定整个二维码图形在照片中的位置。除了这三个特殊方阵外,其他位置的 0/1 取值由特定方法产生,表示扫描二维码后的交互动作内容。
小明现在重点关注二维码图像中的特殊方阵,想定位仅有的三个特殊方阵。为了简化问题,你可以将二维码视为n∗m的 01 方阵,将用于标定的特殊方阵视为 8×8 的方阵,其形态如下:
11111111 10000001 10111101 10111101 10111101 10111101 10000001 11111111
现在为了安全起见,二维码标定用的三个特殊矩阵不再位于原方阵的三个角上,而是随机的分布在原方阵内(仍然保证特殊方阵之间不会相互重叠),请你找出这三个特殊方阵的位置(每个特殊方阵左上角的坐标)。
输入格式:
第一行n m,表示二维码对应01矩阵的大小(0<n,m≤1000)
第二行起,给出n行m列的01矩阵输出格式:
输出共 3 行,每行两个整数,分别代表一个特殊方阵左上角所位于的行编号和列编号(行编号从上向下数分别是 0, 1, 2, 3, ...;列编号从左向右数分别是 0, 1, 2, 3, ...)。三组坐标将行编号作为第一关键字,列编号作为第二关键字升序排序后输出。
输入样例:
20 20 11111111100111111111 10000001011010000001 10111101111110111101 10111101111110111101 10111101111110111101 10111101000010111101 10000001101110000001 11111111001111111111 11111000110000010111 11110000011100010010 00111011000101011101 00110011010001110001 11111111100010100000 10000001110101001101 10111101010100000101 10111101010111100000 10111101000011111001 10111101001111001001 10000001111100000011 11111111110110001001
输出样例:
0 0 0 12 12 0
代码长度限制
16 KB
时间限制
1000 ms
内存限制
128 MB
AC代码如下:
#include <bits/stdc++.h>
#define buff \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0)
//#define int long long
using namespace std;
int n, m;
char s[1009][1009];
char q[8][8] = {{'1', '1', '1', '1', '1', '1', '1', '1'}, {'1', '0', '0', '0', '0', '0', '0', '1'}, {'1', '0', '1', '1', '1', '1', '0', '1'}, {'1', '0', '1', '1', '1', '1', '0', '1'}, {'1', '0', '1', '1', '1', '1', '0', '1'}, {'1', '0', '1', '1', '1', '1', '0', '1'}, {'1', '0', '0', '0', '0', '0', '0', '1'}, {'1', '1', '1', '1', '1', '1', '1', '1'}};
struct nn
{
int x, y;
} ans[10009];
int cnt = 0;
bool check(int x, int y)
{
if ((x + 7 > n) || (y + 7) > m)
return false;
for (int i = x, I = 0; i <= x + 7; i++, I++)
{
for (int j = y, J = 0; j <= y + 7; j++, J++)
{
if (s[i][j] != q[I][J])
return false;
}
}
return true;
}
bool cmp(nn a, nn b)
{
if (a.x != b.x)
return a.x < b.x;
else
return a.y < b.y;
}
int main()
{
buff;
cin >> n >> m;
for (int i = 0; i < n; i++)
cin >> s[i];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (check(i, j))
{
ans[++cnt].x = i;
ans[cnt].y = j;
}
}
}
sort(ans + 1, ans + 1 + cnt, cmp);
for (int i = 1; i <= 3; i++)
{
cout << ans[i].x << ' ' << ans[i].y << "\n";
}
}
辛苦的楼长疫情防控期间,要尽最大努力的保障同学们饮食!楼长们正在统计订饭的人数,一共是三个园区的统计表放在了一个文档里,有一些粗心的同学没有分清园区,错误的将自己的信息填到了其他园区的统计表上。身为帮助楼长的热心同学,你需要写一个程序将所有同学分到正确的园区并统计各个园区需要准备的早饭、午饭、晚饭的份数。 输入格式:三组数据,每一组代表错误的园区的统计表。 每一组数据第一行是这个统计表上的信息数目n。 输出格式:三组数据,分别代表三个园区的数据状况,按照“松-菊-柳”的顺序输出。 每组数据第一行有四个数,分别是该园区实际订餐的寝室数目,该园区总共订的早餐数目,午餐数目,晚餐数目。 然后输出该园区的所有正确的订单信息,排序输出(保证楼号非递减输出,若是楼号相同的订单则按找寝室号递增输出)。 输入样例:在这里给出一组输入。例如: 输出样例: 数据范围楼号保证在范围[0-9],房号范围为(100~999),订餐数目总数小于1000,每个园区订餐信息不超过20条。 代码长度限制 16 KB 时间限制 1000 ms 内存限制 64 MB |
AC代码如下:
#include <bits/stdc++.h>
#define buff \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0)
#define endl "\n"
using namespace std;
struct nn
{
string yuan;
int num;
int a, b, c;
} song[1000], jv[1000], liu[1000]; // 1 , 2 , 3
int cnts = 0, cntj = 0, cntl = 0;
struct mm
{
int qs = 0;
int zao = 0;
int wu = 0;
int wan = 0;
} s[10];
bool cmp(nn x, nn y)
{
if (x.yuan != y.yuan)
return x.yuan < y.yuan;
else
return x.num < y.num;
}
int main()
{
buff;
int t = 3;
while (t--)
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
string yy;
int numm, x, y, z;
cin >> yy >> numm >> x >> y >> z;
if (yy.size() == 5) // 1
{
song[++cnts].yuan = yy;
song[cnts].num = numm;
song[cnts].a = x;
song[cnts].b = y;
song[cnts].c = z;
s[1].qs++;
s[1].zao += x;
s[1].wu += y;
s[1].wan += z;
}
else if (yy.size() == 3) // 2
{
jv[++cntj].yuan = yy;
jv[cntj].num = numm;
jv[cntj].a = x;
jv[cntj].b = y;
jv[cntj].c = z;
s[2].qs++;
s[2].zao += x;
s[2].wu += y;
s[2].wan += z;
}
else // 3
{
liu[++cntl].yuan = yy;
liu[cntl].num = numm;
liu[cntl].a = x;
liu[cntl].b = y;
liu[cntl].c = z;
s[3].qs++;
s[3].zao += x;
s[3].wu += y;
s[3].wan += z;
}
}
}
sort(song + 1, song + 1 + cnts, cmp);
sort(jv + 1, jv + 1 + cntj, cmp);
sort(liu + 1, liu + 1 + cntl, cmp);
for (int i = 1; i <= 3; i++)
{
cout << s[i].qs << " " << s[i].zao << ' ' << s[i].wu << ' ' << s[i].wan << endl;
if (i == 1)
{
for (int i = 1; i <= cnts; i++)
{
cout << song[i].yuan << ' ' << song[i].num << ' ' << song[i].a << ' ' << song[i].b << ' ' << song[i].c << endl;
}
}
else if (i == 2)
{
for (int i = 1; i <= cntj; i++)
{
cout << jv[i].yuan << ' ' << jv[i].num << ' ' << jv[i].a << ' ' << jv[i].b << ' ' << jv[i].c << endl;
}
}
else
{
for (int i = 1; i <= cntl; i++)
{
cout << liu[i].yuan << ' ' << liu[i].num << ' ' << liu[i].a << ' ' << liu[i].b << ' ' << liu[i].c << endl;
}
}
}
}
等待做核酸最近新一轮新冠疫情来势汹汹,形势极为严峻,为了保障全体师生的安全,在校师生需要每天做核酸。每天医护人员到达的时间都是不固定的,为了简化问题,假设医护人员到达的时间是整分钟(如10:05:00),并且知道医护人员到达时间的区间,医护人员在这个区间的任意时刻到达的概率相同,核酸检测结束的时间为23:59。在校学生妙酱每天都会按时做核酸,并且妙酱出来做核酸的时间也为整分钟,妙酱想知道自己等多久可以做核酸。由于开始做核酸的时间是不固定的,请你求出妙酱做核酸等待时间(分钟)的期望,忽略妙酱排队等待的时间。 输入格式:第一行医护人员到达时间的区间(hh:mm-hh:mm)。 第二行cc出来做核酸的时间(hh:mm)。 输入的时间均在一天内。 输出格式:等待时间(分钟)的期望值,保留两位小数。 输入样例: 输出样例: 代码长度限制 16 KB 时间限制 1000 ms 内存限制 64 MB |
AC代码如下:
#include <bits/stdc++.h>
#define buff \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0)
#define endl "\n"
using namespace std;
int fh, fm, eh, em;
int myh, mym;
int main()
{
scanf("%d:%d-%d:%d", &fh, &fm, &eh, &em);
scanf("%d:%d", &myh, &mym);
int fym = fh * 60 + fm;
int eym = eh * 60 + em;
double ans = 0;
int end = 23 * 60 + 59;
int my = myh * 60 + mym;
// if(my >= end)
// {
// cout <<
// }
for (int i = fym; i <= eym; i++)
{
if (i >= end)
break;
if (i < my)
continue;
else
{
ans += i - my;
}
}
printf("%.2lf\n", ans / (eym - fym + 1));
}