2021-2022-1 ACM集训队每周程序设计竞赛题解

Posted yueshehanjiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-2022-1 ACM集训队每周程序设计竞赛题解相关的知识,希望对你有一定的参考价值。

A - 苹果派

题意
你 有 a 个 苹 果 和 p 个 苹 果 片 你有a个苹果和p个苹果片 ap
1 个 苹 果 可 以 制 作 3 个 苹 果 片 1个苹果可以制作3个苹果片 13
2 个 苹 果 片 可 以 制 作 1 个 苹 果 派 2个苹果片可以制作1个苹果派 21
问 一 共 可 以 制 作 多 少 个 苹 果 派 问一共可以制作多少个苹果派
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:12...n
1 < = n < = 100. 1 <= n <= 100. 1<=n<=100.

餐 厅 i 在 S i 市 , 餐厅i在Si市, iSi
你 对 每 一 家 餐 厅 都 有 一 个 得 分 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个灯泡。 nm
开 关 编 号 为 1 到 n , 开关编号为1到n, 1n
灯 泡 编 号 为 1 到 m 。 灯泡编号为1到m。 1m

灯 泡 i 连 接 了 k i 个 开 关 : 开 关 s i 1 , s i 2 , . . . , 和 s i k i 。 灯泡i连接了ki个开关:开关si1,si2,...,和siki。 iki:si1si2...siki
对 于 灯 泡 i 连 接 的 这 些 开 关 中 如 果 打 开 的 开 关 数 量 m o d 2 等 于 p [ i ] , 灯 泡 i 会 被 点 亮 。 对于灯泡i连接的这些开关中如果打开的开关数量mod2等于p[i],灯泡i会被点亮。 imod2p[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 n10
我 们 可 以 暴 力 枚 举 所 有 开 关 打 开 或 者 关 闭 的 状 态 我们可以暴力枚举所有开关打开或者关闭的状态

考 虑 使 用 状 态 压 缩 来 做 考虑使用状态压缩来做 使
用 一 个 二 进 制 数 来 表 示 当 前 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集训队每周程序设计竞赛题解

BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解

2021-2022-1 ACM集训队每周程序设计竞赛题解

2021-2022-1 ACM集训队每周程序设计竞赛题解