A. Bus to Pénjamo

题意

有一辆车上面有 \(r\) 排座位,每排有 \(2\) 个座位,现在共 \(n\) 个家庭出行坐公交车,每个家庭 \(a_i\) 个人(保证 \(2r\ge \sum a_i\))。

一个人感到 开心,当且仅当符合一下条件 之一

  • 他和他的家庭成员坐在一排
  • 他独自一人坐在一排(旁边不能有其他人)

问最终最多有多少人 开心

思路

贪心,先让可以两个人一排的家庭成员入座,剩下的看 \([座位数]\) 与 \([剩余人数]\) 的差,得出有多少人能单独坐一排

C++ 代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,r;
void solve(){
cin>>n>>r;
int k=0;
int ans=0;
for(int i=0;i<n;i++){
int ai;
cin>>ai;
k+=(ai%2); //k表示每个家庭落单的人数
r-=(ai/2); //r最终表示还剩下几排座位
ans+=ai-ai%2;
}
r*=2; //还剩r个座位
ans+=min(r-k,k);
cout<<ans<<endl;
}
signed main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}

B. Kar Salesman

题意

共有 \(n\) 中型号的车,第 \(i\) 种型号的车有 \(a_i\) 辆,每次 \(\text{Karel}\) 可以推荐别人购买至多 \(x\) 辆车,且这些为 不同型号

问至少要推销给多少个人才能卖完这些车

思路

求出车数量的总和(设为 \(sum\) ),和 \(a_i\) 的最大值(设为 \(mx\)),最终答案为:\(\displaystyle \max(mx,\lceil \frac{sum}{x} \rceil)\)

C++ 代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve(){
int n,x;
cin>>n>>x;
int mx=0,sum=0;
for(int i=0;i<n;i++){
int ai;
cin>>ai;
mx=max(mx,ai);
sum+=ai;
}
cout<<max(mx,(sum+x-1)/x)<<endl;
}
signed main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}

C. Gerrymandering

题意

一个 \(2*n\) 的网格图,每格代表一个居民(需要进行投票选举,可以投给 A 也可以投给 J),保证 \(2n \bmod 3 =0\),将它分成 连通的 \(3\) 个一组,这一组 将投给 三个人投的更多的人,如 \(2\) 个 A \(1\) 个 J,则这一组投给 A

问:若按最优方案分组,最终投给 \(A\) 的组最多有多少

思路

需要动态规划,仅分为以下情况:

那么,只要转移正确就很简单

转移直接看代码

C++ 代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf=2e9;
int n;
bool check(int a,int b,int c){
int p=(a=='A'),q=(b=='A'),r=(c=='A');
return (p+q+r>=2);
}
void solve(){
cin>>n;
string s[2];
cin>>s[0]>>s[1];
vector<vector<int> > dp(2,vector<int>(n+1,-inf));
dp[0][0]=0;
for(int i=0;i<n;i++){
if(i%3==0){
dp[0][i+3]=max(dp[0][i+3],
dp[0][i]+check(s[0][i],s[0][i+1],s[0][i+2]) //###
+check(s[1][i],s[1][i+1],s[1][i+2])); //### dp[0][i+1]=max(dp[0][i+1], //##
dp[0][i]+check(s[0][i],s[1][i],s[0][i+1])); //#. dp[1][i+1]=max(dp[1][i+1], //#.
dp[0][i]+check(s[0][i],s[1][i],s[1][i+1])); //## }else if(i%3==1){
if(i<n-3){
dp[0][i+3]=max(dp[0][i+3],
dp[0][i]+check(s[0][i+1],s[0][i+2],s[0][i+3]) //.###
+check(s[1][i],s[1][i+1],s[1][i+2])); //###. dp[1][i+3]=max(dp[1][i+3],
dp[1][i]+check(s[0][i],s[0][i+1],s[0][i+2]) //###.
+check(s[1][i+1],s[1][i+2],s[1][i+3])); //.###
} dp[0][i+2]=max(dp[0][i+2], //.#
dp[0][i]+check(s[1][i],s[1][i+1],s[0][i+1])); //## dp[0][i+2]=max(dp[0][i+2], //##
dp[1][i]+check(s[0][i],s[0][i+1],s[1][i+1])); //.#
}
}
cout<<dp[0][n]<<endl;
}
signed main(){
int t
cin>>t;
while(t--){
solve();
}
return 0;
}

D1. Asesino (Easy Version)

题意

这是一道 交互题

有一种游戏,共有三种角色:Knight, Knave, Impostor,可以理解为:好人、坏人和内鬼

每局游戏有 \(n\) 个人,其中有 \(1\) 个内鬼,若干个好人和坏人(可能 \(0\) 个)

你忘记了每个人的角色,但是,你可以问玩家 \(i\) :玩家 \(j\) 是不是好人?询问格式:? i j

玩家 \(i\) 会回答你 1 表示是好人,0 表示不是好人

以下为不同身份的回答表格:

最多询问 \(n+69\) 次,请找出内鬼是玩家几,格式为 ! i

思路

观察表格发现,若 \([i\ 认为 \ j 的身份]\) 和 \([j \ 认为\ i\ 的身份]\) 不同,那么 \(i\) 和 \(j\) 中必定有一个内鬼

那么我们可以问每两个相邻的人,\(i\) 和 \(i+1\) 互相问,\(i+2\) 和 \(i+3\) 互相问,以此类推,最终找到 \(k\) 和 \(k+1\) 不同的位置,再和其他的比较,就可以得到内鬼的位置

C++ 代码

#include<bits/stdc++.h>
using namespace std;
int n;
bool query(int a,int b){
cout<<"? "<<a<<" "<<b<<endl;
int p;
cin>>p;
cout<<"? "<<b<<" "<<a<<endl;
int q;
cin>>q;
return p!=q;
}
void solve(){
cin>>n;
int pos=-1;
for(int i=1;i<n;i+=2){
bool flag=query(i,i+1);
if(flag){
pos=i;
break;
}
}
if(pos==-1){
cout<<"! "<<n<<endl;
}else if(query(pos,pos>1?pos-1:pos+2)){
cout<<"! "<<pos<<endl;
}else{
cout<<"! "<<pos+1<<endl;
}
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}

Codeforces Round 978 (Div. 2) A-D1 题解的更多相关文章

  1. Codeforces Round #612 (Div. 2) 前四题题解

    这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...

  2. Codeforces Round #198 (Div. 2)A,B题解

    Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...

  3. Codeforces Round #672 (Div. 2) A - C1题解

    [Codeforces Round #672 (Div. 2) A - C1 ] 题目链接# A. Cubes Sorting 思路: " If Wheatley needs more th ...

  4. Codeforces Round #741 (Div. 2), problem: (D1) Two Hundred Twenty One (easy version), 1700

    Problem - D1 - Codeforces 题意: 给n个符号(+或-), +代表+1, -代表-1, 求最少删去几个点, 使得     题解(仅此个人理解): 1. 这题打眼一看, 肯定和奇 ...

  5. Codeforces Round #579 (Div. 3) 套题 题解

    A. Circle of Students      题目:https://codeforces.com/contest/1203/problem/A 题意:一堆人坐成一个环,问能否按逆时针或者顺时针 ...

  6. Codeforces Round #614 (Div. 2) A-E简要题解

    链接:https://codeforces.com/contest/1293 A. ConneR and the A.R.C. Markland-N 题意:略 思路:上下枚举1000次扫一遍,比较一下 ...

  7. Codeforces Round #610 (Div. 2) A-E简要题解

    contest链接: https://codeforces.com/contest/1282 A. Temporarily unavailable 题意: 给一个区间L,R通有网络,有个点x,在x+r ...

  8. Codeforces Round #611 (Div. 3) A-F简要题解

    contest链接:https://codeforces.com/contest/1283 A. Minutes Before the New Year 题意:给一个当前时间,输出离第二天差多少分钟 ...

  9. Codeforces Round #741 (Div. 2)部分题题解

    我果然还是太菜了,就写了两道题....真是水死了.... A The Miracle and the Sleeper 简化题意:给定\(l,r\),求\(a\)%\(b\)的最大值,其中\(r> ...

  10. Codeforces Round #499 (Div. 2) D. Rocket题解

    题目: http://codeforces.com/contest/1011/problem/D This is an interactive problem. Natasha is going to ...

随机推荐

  1. 4.vue Router路由设置

    router=>index.js 设置路由信息 1.路由文件按分组拆分多个 import analysisRouter from './analysisRouter'; import users ...

  2. Hetao P1156 最大战力 题解 [ 绿 ][ 二分 ][ 最大子段和 ]

    最大战力 Vjudge 原题 题解 形式化题意 给定两个数组 \(a[n]\) 和 \(b[n]\) ,需要在数组 \(b\) 中选择一个区间 \(b[l,r]\) ,替换掉区间 \(a[l,r]\) ...

  3. 交叉编译SQLite3

    交叉编译SQLite3 SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的SQL 数据库引擎. 它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置. ...

  4. Flume - [03] HDFS Sink

    一.概述   将事件写入 Hadoop 分布式文件系统(HDFS).目前支持创建文本和序列文件.支持两种文件类型的压缩.可以根据经过的时间.数据大小或事件数 周期性地滚动文件(关闭当前文件并创建文件) ...

  5. Python - 程序体验

    CASE:输入某年某月某日,判断这一天是这一年的第几天? # 输入某年某月某日, 判断这一天是这一年的第几天? import datetime dtstr = input('Enter the dat ...

  6. windows 配置java发布环境

    一.jdk安装 1.下载jdk安装文件 2.在"系统变量"下"新建"选项"JAVA_HOME"值为:"jdk"文件夹路径 ...

  7. C/C++显示类型转换的位拓展方式

    最近用verilator写模块的tb,在这里卡了好久(测半天都是C++写的问题) 要点 变量从小位宽到大位宽显示类型转换(explicit cast)时的位拓展方式,取决于转换前变量的符号性. 倘若转 ...

  8. Open-Sora 2.0 重磅开源!

    潞晨科技正式推出 Open-Sora 2.0 -- 一款全新开源的 SOTA 视频生成模型,仅 20 万美元(224 张 GPU)成功训练商业级 11B 参数视频生成大模型.开发高性能的视频生成模型通 ...

  9. sql server 与 mysql 中常用的SQL语句区别

    sql server 与 mysql 的区别   由于博主之前学过mysql,目前在学习SQL server,原来以为这两个数据库之间的sql语句应该不会有太大区别.但是学sql server(用的版 ...

  10. Mac 干净彻底地卸载 MySQL

    前言 卸载MySQL,首先得知道MySQL的路径.默认的话是在/usr/local文件夹下的. 在系统偏好设置面板中可以看到之前安装的MySQL,此时若想卸载MySQL,可以按照如下步骤来. 之前安装 ...