2021-2022-1 ACM集训队每周程序设计竞赛题解
Posted yueshehanjiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-2022-1 ACM集训队每周程序设计竞赛题解相关的知识,希望对你有一定的参考价值。
A - 苹果派
题意:
你
有
a
个
苹
果
和
p
个
苹
果
片
你有a个苹果和p个苹果片
你有a个苹果和p个苹果片
1
个
苹
果
可
以
制
作
3
个
苹
果
片
1个苹果可以制作3个苹果片
1个苹果可以制作3个苹果片
2
个
苹
果
片
可
以
制
作
1
个
苹
果
派
2个苹果片可以制作1个苹果派
2个苹果片可以制作1个苹果派
问
一
共
可
以
制
作
多
少
个
苹
果
派
问一共可以制作多少个苹果派
问一共可以制作多少个苹果派
0
<
=
a
,
p
<
=
100
0 <= a , p <= 100
0<=a,p<=100
思路:
模
拟
模拟
模拟
时间复杂度:
O
1
O1
O1
#include <bits/stdc++.h>
#define fer(i,a,b) for(re i = a ; i <= b ; ++ i)
#define der(i,a,b) for(re i = a ; i >= b ; -- i)
#define de(x) cout << x << "\\n"
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int>
#define re register int
#define int long long
#define pb push_back
#define y second
#define x first
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f ;
const int N = 1e6 + 10 , M = 2010 , mod = 1e9 + 7 ;
signed main()
{
int n , p ;
cin >> n >> p ;
p += 3 * n ;
de(p/2) ;
return 0;
}
B - 餐馆指南
题意:
你
决
定
写
一
本
介
绍
好
餐
馆
的
书
。
你决定写一本介绍好餐馆的书。
你决定写一本介绍好餐馆的书。
你
想
介
绍
的
餐
厅
有
N
家
:
餐
厅
1
,
餐
厅
2
,
.
.
.
餐
厅
n
你想介绍的餐厅有N家 : 餐厅1,餐厅2,...餐厅n
你想介绍的餐厅有N家:餐厅1,餐厅2,...餐厅n
1
<
=
n
<
=
100.
1 <= n <= 100.
1<=n<=100.
餐
厅
i
在
S
i
市
,
餐厅i在Si市,
餐厅i在Si市,
你
对
每
一
家
餐
厅
都
有
一
个
得
分
p
你对每一家餐厅都有一个得分p
你对每一家餐厅都有一个得分p
1
<
=
p
<
=
100
1 <= p <= 100
1<=p<=100
没
有
两
家
餐
馆
得
分
相
同
。
没有两家餐馆得分相同。
没有两家餐馆得分相同。
您
要
按
以
下
顺
序
介
绍
餐
厅
:
您要按以下顺序介绍餐厅:
您要按以下顺序介绍餐厅:
餐
厅
按
其
城
市
名
称
的
字
典
顺
序
排
列
。
餐厅按其城市名称的字典顺序排列。
餐厅按其城市名称的字典顺序排列。
如
果
同
一
个
城
市
有
多
家
餐
厅
,
如果同一个城市有多家餐厅,
如果同一个城市有多家餐厅,
则
按
得
分
降
序
排
列
。
则按得分降序排列。
则按得分降序排列。
按
照
书
中
介
绍
的
顺
序
打
印
餐
厅
的
编
号
。
按照书中介绍的顺序打印餐厅的编号。
按照书中介绍的顺序打印餐厅的编号。
思路:
结
构
体
自
定
义
排
序
结构体自定义排序
结构体自定义排序
时间复杂度:
O
n
l
o
g
n
Onlogn
Onlogn
#include <bits/stdc++.h>
#define fer(i,a,b) for(re i = a ; i <= b ; ++ i)
#define der(i,a,b) for(re i = a ; i >= b ; -- i)
#define de(x) cout << x << "\\n"
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int>
#define re register int
#define int long long
#define pb push_back
#define y second
#define x first
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f ;
const int N = 1e6 + 10 , M = 2010 , mod = 1e9 + 7 ;
struct ai{
int id , score ; // 编号 , 得分
string city ; // 城市名称
}q[M] ;
bool cmp(ai a , ai b)
{
if(a.city == b.city) return a.score > b.score ; // 城市字典序相等的时候按照得分大于(逆序)排序
else return a.city < b.city ; // 否则按照字典序小于(顺序)排序
}
signed main()
{
int n ;
cin >> n ;
fer(i,1,n)
{
cin >> q[i].city >> q[i].score ;
q[i].id = i ;
}
sort(q + 1 , q + 1 + n , cmp) ;
fer(i,1,n)
{
cout << q[i].id << "\\n" ;
}
return 0;
}
C - 开关
题意:
我
们
有
“
开
”
和
“
关
”
状
态
的
n
个
开
关
和
m
个
灯
泡
。
我们有“开”和“关”状态的n个开关和m个灯泡。
我们有“开”和“关”状态的n个开关和m个灯泡。
开
关
编
号
为
1
到
n
,
开关编号为1到n,
开关编号为1到n,
灯
泡
编
号
为
1
到
m
。
灯泡编号为1到m。
灯泡编号为1到m。
灯
泡
i
连
接
了
k
i
个
开
关
:
开
关
s
i
1
,
s
i
2
,
.
.
.
,
和
s
i
k
i
。
灯泡i连接了ki个开关:开关si1,si2,...,和siki。
灯泡i连接了ki个开关:开关si1,si2,...,和siki。
对
于
灯
泡
i
连
接
的
这
些
开
关
中
如
果
打
开
的
开
关
数
量
m
o
d
2
等
于
p
[
i
]
,
灯
泡
i
会
被
点
亮
。
对于灯泡i连接的这些开关中如果打开的开关数量mod2等于p[i],灯泡i会被点亮。
对于灯泡i连接的这些开关中如果打开的开关数量mod2等于p[i],灯泡i会被点亮。
开
关
的
“
开
”
和
“
关
”
状
态
有
多
少
种
组
合
可
以
点
亮
所
有
灯
泡
?
开关的“开”和“关”状态有多少种组合可以点亮所有灯泡?
开关的“开”和“关”状态有多少种组合可以点亮所有灯泡?
1
<
=
n
,
m
<
=
10
1 <= n , m <= 10
1<=n,m<=10
1
<
=
k
i
<
=
n
1 <= ki <= n
1<=ki<=n
p
[
i
]
=
0
/
1
p[i] = 0 / 1
p[i]=0/1
思路:
考
虑
n
的
范
围
最
大
只
有
10
考虑n的范围最大只有10
考虑n的范围最大只有10
我
们
可
以
暴
力
枚
举
所
有
开
关
打
开
或
者
关
闭
的
状
态
我们可以暴力枚举所有开关打开或者关闭的状态
我们可以暴力枚举所有开关打开或者关闭的状态
考
虑
使
用
状
态
压
缩
来
做
考虑使用状态压缩来做
考虑使用状态压缩来做
用
一
个
二
进
制
数
来
表
示
当
前
n
个
开
关
的
打
开
状
态
用一个二进制数来表示当前n个开关的打开状态
用一个二进制数来表示当前n个开关的打开状态
假 设 现 在 的 二 进 制 数 是 010101 假设现在的二进制数是010101 假设现在的二进制数是010101以上是关于2021-2022-1 ACM集训队每周程序设计竞赛题解的主要内容,如果未能解决你的问题,请参考以下文章
BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛(10)题解
BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解
BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解