Codeforces Round 978 (Div. 2) A-D1 题解

news/2024/10/14 10:03:26

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\) 的组最多有多少

pAtVass.md.png

思路

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

pAtVhe1.png

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

转移直接看代码

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 tcin>>t;while(t--){solve();}return 0;
}

D1. Asesino (Easy Version)

题意

这是一道 交互题

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

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

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

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

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

pAtVLyd.png

最多询问 \(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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71349.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

如何修改公司网站内容?

要修改公司网站的内容,通常可以按照以下步骤进行:登录网站后台:如果您的公司网站使用的是内容管理系统(CMS)如WordPress、Drupal或Joomla等,您需要登录到该系统的管理后台。 如果是自定义开发的网站,则可能需要通过特定的管理界面或者直接编辑源代码。定位需要修改的内容…

企业网站建设完成以后还能进行修改吗

可以进行修改的。通常有以下几种常见的方式来进行后续的调整和优化:内容管理系统(CMS): 许多现代网站都基于CMS构建,如WordPress、Drupal等。这些系统允许用户通过后台界面轻松地添加、删除或修改页面内容,无需直接编辑代码。前端框架和工具: 如果网站使用了如React、Vue等…

公司网站怎么修改地址和图片

要修改公司网站上的地址和图片,通常需要按照以下步骤操作:登录网站后台:使用管理员账号登录到网站的内容管理系统(CMS)或者网站管理后台。定位到需要修改的内容:在后台找到页面管理或内容编辑的部分,选择包含地址和图片的页面或模块。修改地址信息:找到页面上显示地址的…

网站登录数据库失败怎么办?

当遇到网站登录数据库失败的问题时,可以按照以下步骤进行排查和解决:检查数据库连接参数:确认数据库地址、端口、用户名和密码是否正确。 检查是否有输入错误或配置文件中的信息是否是最新的。验证数据库服务状态:使用命令行工具如mysql -u username -p尝试直接连接数据库,…

WTConv:小参数大感受野,基于小波变换的新型卷积 | ECCV24

近年来,人们尝试增加卷积神经网络(CNN)的卷积核大小,以模拟视觉Transformer(ViTs)自注意力模块的全局感受野。然而,这种方法很快就遇到了上限,并在实现全局感受野之前就达到了饱和。论文证明通过利用小波变换(WT),实际上可以获得非常大的感受野,而不会出现过参数化…

企业官网建设完成以后还能进行修改吗

企业官网建设完成后是可以进行修改的。通常有以下几种常见的情况和方式:内容更新:企业新闻、产品信息、联系方式等可以随时更新。 页面调整:根据用户反馈或业务需求调整页面布局、设计风格等。 功能增加:随着业务发展,可能需要添加新的功能模块,如在线客服系统、用户注册…

后台管理 + H5 + 微信小程序!又一个开源轻量的小商城!

litemall —— 一个小商场系统,基于 SpringBoot + Vue + 微信小程序实现,包含管理员端、H5 端和微信小程序端!大家好,我是 Java陈序员。 之前,给大家推荐过几款开源的商城系统。 一个 5.2k+ Star 的微服务商城系统 一个基于Vue+Vuex+iView的电子商城网站 今天,再给大家介…

vue-cropper图片裁剪(vue2与vue3)

在项目中,前端开发经常会遇到有图片上传的需求,而别人的组件大多都满足不了当下产品的需求,这是往往我们得去依靠组件自己自定义一个项目通用的裁剪组件 一、vue-cropper安装依赖: vue2: npm install vue-cropper 或 yarn add vue-cropper vue3: npm install vue-cropp…