Codeforces Round #676 (Div. 2)A-D题解

Comsol&Matlab 亥姆霍兹共振消声器传递损失理论解与仿真解 当外界噪声以共振频率进入共振器时,共振器内的空气质量发生周期性的振动,从而减少或消除噪声。当特定频率的声波进入共振器时,共振器的空气质量会发生周期性的振动,从而实现对该频率的噪声的减弱或消除。5. 反射和吸收:共振器的几何形状和容积还可以影响共振器内空气振动的反射和吸收。然而,对于不同频率的噪声,需要相应调整共振器的参数以匹配新的共振频率。3. 腔体内的空气振动:当特定频率的声波进入共振器时,共振器内的空气质量会发生振动。2. 声波进入共振器:外界的声波通过共振器的颈部进入共振器的封闭空腔。 阅读详情

Codeforces Round #676 (Div. 2)A-D题解
比赛链接:https://codeforces.com/contest/1421

A题
水,贪心,位运算

题意为给定两个正整数a和b,你需要找到一个x,使得a异或x加上b异或x的值最小。输出这个最小值。

首先把a和b全部写为二进制。
对于二进制上同一位来说,如果a在这一位上与b在这一位上的值相同,也就是同为1或者同为0,我们可以让x在这一位上的值与a和b的值相同,就可以使得最后结果的这一位上变为0,满足尽可能小这一目标。
如果a和b在这一二进制为上的值一个为1,一个为0,无论我们的x在这一位上是1还是0,最后的结果在这一位上都是1。
总结后可以得到一个规律,在二进制位上a和b相同的位,最后结果为0;不相同的位,最后结果为1。与异或运算相契合,因此直接输出a异或b即可。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int a,b;
        cin>>a>>b;
        cout<<(a^b)<<endl;
    }
}

B题
构造

题意为给定一个n×\times×n的矩阵,其中(1,1)为起点S,(n,n)为终点F,其余位置均为0或者1。
从起点出发,现在0或者1中选择一个值,之后只能走当前位置相邻且与该值相等的格子。
现在你最多改变两个格子的值,从0改为1或者从1改为0,使得从起点无法有路径到达终点。

这里的话要注意到,我们的可操作次数非常少,最多只有2次,因此我们必然要改变关键的格子位置。
对于起点和终点来说,与他们相邻的分别有两个格子,这4个格子是最为关键的。
我们只需要让起点周围的两个格子的值相同,终点周围的两个格子的值相同,且起点和终点周围的格子值不相同。这样的话从起点出发就必须只能选择起点周围格子的那个值,而这个值是必然走不到终点的。

按照这种构造思路,按照起点终点周围格子值的情况再分成三种情况讨论:
1.起点周围两个格子的值相等,我们只需要将终点周围的两个格子变为与起点不同即可。
2.终点周围两个格子的值相等,我们只需要将起点周围的两个格子变为与终点不同即可。
3.不满足上述两种情况下,起点周围的两个格子一个为1一个为0,终点周围的两个格子同样一个为1一个为0,我们把起点周围的1变为0,终点周围的0变为1即可。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

string field[207];
bool right_start,down_start;
bool up_end,left_end;

int32_t main()
{
	IOS;
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		for(int i=0;i<n;i++) cin>>field[i];
		right_start=field[0][1]-'0';
		down_start=field[1][0]-'0';
		up_end=field[n-2][n-1]-'0';
		left_end=field[n-1][n-2]-'0';
		vector<pair<int,int>>ans;
		if(right_start==down_start)//如果起点的右侧和下侧两个点的值相同
		{
			if(up_end==right_start) ans.push_back({n-1,n});//将终点上侧和左侧点的值变为与起点周围不同
			if(left_end==right_start) ans.push_back({n,n-1});
		}
		else if(up_end==left_end)//如果终点上侧和左侧点的值相同
		{
			if(right_start==up_end) ans.push_back({1,2});//将起点右侧和下侧的两个点的值变为与终点周围不同
			if(down_start==up_end) ans.push_back({2,1});
		}
		else//剩余的情况就是起点周围的两个点不相同,且终点周围的两个点周围都不相同的情况
		{
			if(right_start) ans.push_back({1,2});//我们把起点周围的1变为0,只会有1次操作
			if(down_start) ans.push_back({2,1});
			if(!up_end) ans.push_back({n-1,n});//把终点周围的0变为1,同样只会有1次操作
			if(!left_end) ans.push_back({n,n-1});
		}
		cout<<ans.size()<<endl;
		for(int i=0;i<ans.size();i++) cout<<ans[i].first<<' '<<ans[i].second<<endl;
	}
}

C题
字符串构造

题意为给定一个长度至少为3,最大为1e5的字符串S,你需要在30次操作内使得这个字符串变为回文串,且长度不超过1e6。
你可以执行两种操作,令length为字符串的当前长度
第一种操作,选择一个下标x,x在2到length-1之间(闭区间),将下标2到x的子串翻转后复制到字符串头部。
第二种操作,选择一个下标x,x在2到length-1之间(闭区间),将下标x到length-1的子串翻转后复制到字符串尾部。

注意到这个操作方式得到的字符串,有个恶心的点,如果我们选择操作2,下标选择2的话,类似字符串abcd会变成abcdcb,就因为复制的部分少了下标1的这个字符,导致无法构成回文串。
那么我们可以想到,如果原字符串是ababcd这样的形式(头部第一个字符和第三个字符相同),操作2下标选择2后,字符串是ababcdcbab,我们再执行操作2,下标选择length-1,就是ababcdcbaba回文串了。
那么我们能否将任意的字符串都构造成头部第一个字符和第三个字符相同的形式呢?我们可以通过一次简单的操作1,下标选择2,就可以得到的这样的字符串。

因此执行上述的三次操作,就可以将任意给定的字符串变为回文串,且长度变为原来的两倍加一,必然在1e6之内。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int32_t main()
{
    IOS;
    string s;
    cin>>s;
    cout<<3<<endl;
    cout<<'L'<<' '<<2<<endl;
    cout<<'R'<<' '<<2<<endl;
    cout<<'R'<<' '<<s.size()*2-1<<endl;
}

D题
贪心,分类讨论

题意为在一个六边形的蜂房上,起点在(0,0),告诉你终点位置,并且告知朝着六个方向移动的消耗,询问最小消耗是多少。

这里先认识到,六个方向分别对应六种坐标的改变方式,先用c[]数组存储下来。
c[0]对应(+1,+1)
c[1]对应(0,+1)
c[2]对应(-1,0)
c[3]对应(-1,-1)
c[4]对应(0,-1)
c[5]对应(+1,0)
之后再根据贪心的策略可以知道,c[0]和c[3]操作,c[2]和c[5]操作这些都是不可能同时使用的,因为这样走了回头路,必然不是最优的了。

我们可以列出这样的组合方式:
1.(+1,0)和(-1,0)中的一种与(0,+1)和(0,-1)中的一种组合,直接横纵坐标割裂开走到终点。
2.(+1,+1)与(+1,0)或者(0,+1)组合,处理终点横纵坐标均大于0的情况,此处必然要优先使用(+1,+1)否则横坐标或者纵坐标中必然有一个是无法被另一个操作改变的。
3.(-1,-1)与(-1,0)或者(0,-1)组合,处理终点横纵坐标均小于0的情况,此处必然要优先使用(-1,-1)否则横坐标或者纵坐标中必然有一个是无法被另一个操作改变的。(后面的情况都是如此,不再赘述)
4.(+1,+1)与(0,-1)组合,处理终点横坐标不小于0,且纵坐标不大于横坐标的情况
5.(+1,+1)与(-1,0)组合,处理终点纵坐标不小于0,且横坐标不大于纵坐标的情况
6.(-1,-1)与(+1,0)组合,处理终点纵坐标不大于0,且横坐标不小于纵坐标的情况
7.(-1,-1)与(0,+1)组合,处理终点横坐标不大于0,且纵坐标不小于横坐标的情况
除了上述的两两组合外,其他所有的两两组合均存在前面讨论的回头路情况,不是最优。并且上述的两两组合中再增加任何一个不同的第三种操作,同样会形成回头路。因此讨论上述情况即可。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int32_t main()
{
	IOS;
	int t;
	cin>>t;
	while(t--)
	{
		ll x,y;
		cin>>x>>y;
		ll c[6];
		for(int i=0;i<6;i++) cin>>c[i];
//		c[0]对应(+1,+1)
//		c[1]对应(0,+1)
//		c[2]对应(-1,0)
//		c[3]对应(-1,-1)
//		c[4]对应(0,-1)
//		c[5]对应(+1,0)
		ll ans=0;
		if(x>0) ans+=x*c[5];//直接选择c[2]或者c[5],再使用c[1]或者c[4]所需要的消耗
		else ans-=x*c[2];
		if(y>0) ans+=y*c[1];
		else ans-=y*c[4];
		if(x>=0&&y>=0)//处理终点横纵坐标均大于0的情况
		{
			ll temp=min(x,y)*c[0];
			if(x>y) temp+=(x-y)*c[5];
			else temp+=(y-x)*c[1];
			ans=min(ans,temp);
		}
		if(x<=0&&y<=0)//处理终点横纵坐标均小于0的情况
		{
			ll temp=-max(x,y)*c[3];
			if(x<y) temp+=(y-x)*c[2];
			else temp+=(x-y)*c[4];
			ans=min(ans,temp);
		}
		if(x>=0&&y<=x) ans=min(ans,c[0]*x+c[4]*(x-y));//处理终点横坐标不小于0,且纵坐标不大于横坐标的情况
		if(y>=0&&x<=y) ans=min(ans,c[0]*y+c[2]*(y-x));//处理终点纵坐标不小于0,且横坐标不大于纵坐标的情况
		if(y<=0&&x>=y) ans=min(ans,-c[3]*y+c[5]*(x-y));//处理终点纵坐标不大于0,且横坐标不小于纵坐标的情况
		if(x<=0&&y>=x) ans=min(ans,-c[3]*x+c[1]*(y-x));//处理终点横坐标不大于0,且纵坐标不小于横坐标的情况
		cout<<ans<<endl;
	}
}

ARFoundation系列讲解 - 手部跟踪编程 通过使用ARFoundation的手部跟踪子系统,我们可以轻松地在AR应用程序中实现与用户手部的交互。通过设置AR环境、创建场景和相机、添加手部跟踪功能以及编写相应的脚本,我们可以开始在AR场景中跟踪和操作用户的手部。在Unity中创建一个新场景,并将AR Session组件添加到场景中的一个空对象上。手部跟踪的具体实现可能因AR设备和平台的不同而有所差异,你可能需要根据你的使用情况进行一些适配和调整。当你将手部放入AR场景中时,手部跟踪系统将触发相应的事件,并调用脚本中的回调函数。 阅读详情

相关推荐

别再死记硬背了!用51单片机的AD/DA和PWM,亲手做个简易示波器信号发生器

本文详细介绍了如何利用51单片机的PWM和AD/DA功能制作简易示波器信号发生器。通过PWM模拟DAC输出波形,结合XPT2046 ADC进行信号测量,实现方波、三角波和正弦波的生成与显示。项目不仅成本低廉,还能帮助电子爱好者深入理解51单片机的核心功能,是理论与实践结合的绝佳案例。

weixin_28675839的博客 265

Codeforces Round #676 (Div. 2)

A. XORwice 题意 输入a和b,求 (????⊕????) + (????⊕????) (x为任意值) 的最小值。 题解 要使(????⊕????) + (????⊕????)最小,言外之意就是将a和b转化为二进制下的公共的1部分被异或,答案其实就是a^b。 int main() { int t; cin >> t; while(t--) { int a,b; cin >> a >> b; cout << (a^b) <&lt

张小生的先生的博客 568

abb机器人指令手册_ABB机器人配置圆形输送链跟踪

更多内容请点击上方ABB机器人实战技巧关注也可点击公众号下方往期经典浏览更多内容转载请先后台留言,大家一起支持原创,推动机器人使用和发展本公众号对各类ABB机器人应用,仿真,毕业设计提供技术支持,详细后台留言本公众号诚挚希望与各机器人培训机构,机器人使用单元合作,提供技术支持,详细后台留言1. 通常的机器人输送链跟踪,均为直线输送链跟踪,例如下图2. 有些情况,输送链为圆形,例如...

weixin_39849894的博客 2044

C语言,求两正整数的最大公约数算法

1.题目分析 题目:求两正整数的最大公约数。 (1).辗转相除法(又名欧几里德法)C语言中用于计算两个正整数a,b的最大公约数和最小公倍数,实质它依赖于下面的定理: a b=0 gcd(a,b) = gcd(b,a mod b) b!=0 根据这一定理可以采用函数嵌套调用和递归调用形式进行求两个数的最大公约数和最小公倍数,现分别...

weixin_42022728的博客 5519

SillyTavern与Claude Code API集成:从零搭建AI聊天酒馆的完整指南

本文提供了一份从零搭建SillyTavern AI聊天前端的完整指南,重点讲解如何将其与Claude Code API集成。内容涵盖Node.js环境准备、SillyTavern部署、OpenAI兼容格式的API配置、模型选择与参数调校,以及角色扮演、扩展功能等高级玩法,帮助用户打造本地化、可定制的专属AI聊天体验。

assembly8low的博客 2610

使用Qt Creator调用eBUS SDK

在新界面,勾选左下角“ Show unreachable Network Devices",可以看到没有成功连接的网络相机,原因是IP地址配置错误。每个版本的OpenCV的依赖项的名字都不同,我这里是opencv_world490.lib与opencv_world490d.lib。函数,可以看到在这里是图像缓存区,能够对捕获的图像进行一些操作。在Visual Studio打开项目属性,在VC++目录这里,把Opencv的路径添加进去。这时,会自动跳转到mainwindow.cpp,生成该按钮对应的槽函数。

qq_35685051的博客 1288

Codeforces Round #676 (Div. 2) B

B. Putting Bricks in the Wall 原题链接 题面 Pink Floyd are pulling a prank on Roger Waters. They know he doesn’t like walls, he wants to be able to walk freely, so they are blocking him from exiting his room which can be seen as a grid. Roger Waters has a square

qq_52519330的博客 185

UCIE Specification详解(八)

Logical Physical Layer(逻辑物理层)

Crazzy_M的博客 1608

Codeforces Round #676 (Div. 2) A - D个人题解(E题待补)

1421A. XORwice 题目链接:Click Here cpp // Author : RioTian // Time : 20/10/18 #include <bits/stdc++.h> #define ms(a, b) memset(a, b, sizeof a) using namespace std; typedef long long ll; ll n, m, _; void solve() { cin >> n >> m; co

mds123456的博客 316

Docker - 基本概念、与虚拟机的区别、架构、镜像操作、容器操作、数据卷挂载

p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口(配置映射是因为用户只能通过 http 请求访问到服务器,不能直接访问到对应的容器,因此需要服务器端口与容器端口建立映射关系)这里我们有两种启动 redis 的方式,第一种是直接启动 redis ,第二种是以 AOF 持久化的方式启动容器(--appendonly yes),如下图。如果需要持续查看日志信息可以添加 -f 参数,例如:docker logs -f mn ,这里 mn 是自定义容器名称, ctrl + c 可以停止跟踪。

CYK_byte的博客 1万+

Android 车载应用之快速入门

车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。

xiangzhihong8的专栏 1111

Codeforces Round #676 (Div. 2) A - D个人题解(E题待补)

1421A. XORwice 题目链接:Click Here // Author : RioTian // Time : 20/10/18 #include <bits/stdc++.h> #define ms(a, b) memset(a, b, sizeof a) using namespace std; typedef long long ll; ll n, m, _; voi...

橘嘉禾 67

【49】软考软件设计师——冲刺复盘:高频易错点与应试策略|复盘清单+应试技巧

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第49篇,属于**模块六:冲刺与模拟**终篇,聚焦考前最后阶段的“精准复盘+应试提分”。全文围绕“高频易错点清零、答题时间优化、应急处理落地”三大核心,梳理9大知识领域的典型易错点(附避坑技巧)、优化版答题时间分配(含取舍策略)、考中全场景应急方案,配套可直接使用的“复盘清单”和“应试技巧手册”,帮助考生在最后阶段查漏补缺、固化得分逻辑,避免因低级错误丢分,以“稳、准、快”的状态应对考试。下一篇第50篇(终章)将进行全专栏知识体系回顾、考试策略总结

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 440

Codeforces Round #676 (Div. 2) D. Hexagons

Codeforces Round #676 (Div. 2) D. Hexagons (贪心&思维) 思路:对某一个范围的点的进行考虑,比如C1,C2C_1,C_2C1​,C2​ 夹角区域的点,显然C4,C5C_4,C_5C4​,C5​两种操作不用考虑,然后因为C3,C6C_3,C_6C3​,C6​相互抵消,肯定至多考虑一种,所以六个操作变成了三个操作,然后又因为C2C_2C2​操作等价于C1+C3C_1+C_3C1​+C3​,所 以只需比较两者花费,若C1+C3C_1+C_3C1​+C3​较小,

Harris-H的博客 577

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Codeforces Round #676 (Div. 2)题解

Problem - A - Codeforces 题目大意:给定数a和b,请你找出一个数x,使得a^x + b^x的值最小,输出最小值. 思路:为了使两个数异或之后的和尽可能地小,那么只有当两个数同一位上都是1的时候才会变小,此时x该位上可以为1,如果a,b该位上不相等,那么x为1或者为0都不影响结果.那么可以发现,ax+bx的最小值就是a^b的值. #include<bits/stdc++.h> using namespace std; #define rep(x,y,z) for(i

qq_53629286的博客 160

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Codeforces Round #676 (Div. 2)-D. Hexagons(模拟)

Codeforces Round #676 (Div. 2)-D. Hexagons Lindsey Buckingham told Stevie Nicks “Go your own way”. Nicks is now sad and wants to go away as quickly as possible, but she lives in a 2D hexagonal world. Consider a hexagonal tiling of the plane as on the pictu

weixin_45434743的博客 202

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Codeforces Round #675 (Div. 2)、Codeforces Round #676 (Div. 2)

Codeforces Round #675 (Div. 2)、Codeforces Round #676 (Div. 2) A. XORwice # include <iostream> # include <cstdio> void solve() { int a, b; scanf("%d%d", &a, &b); int x = a & b; int ans = (a ^ x) + (b ^ x); printf("%d\n", ans)

星宇康的博客 297

Codeforces Round #676 (Div. 2) A~E个人题解

Codeforces Round #676 (Div. 2)的全部个人题解

qq_53446104的博客 240

【解题报告】Codeforces Round #354 (Div. 2)

简略的解题报告。

TRiddle的博客 657

A. XORwice(思维)Codeforces Round #676 (Div. 2)

原题链接: https://codeforces.com/contest/1421/problem/A 测试样例 input 6 6 12 4 9 59 832 28 14 4925 2912 1 1 output 10 13 891 18 6237 0 Note For the first test case Sana can choose x=4 and the value will be(6⊕4)+(12⊕4)=2+8=10(6⊕4) + (12⊕4) = 2+8 = 10(6⊕4)+(12⊕

pursuit的博客 636

Codeforces Round #724 div.2 A-F题解

视频讲解:TBD A. Omkar and Bad Story 题目大意 如果数组 bbb 中任意两个元素之差的绝对值 ∣bi−bj∣|b_i-b_j|∣bi​−bj​∣ 都在数组 bbb 中至少出现一次,则称数组 bbb 是好数组。 给定一个包含 n(2≤n≤100)n(2 \leq n \leq 100)n(2≤n≤100) 的数组 a(−100≤ai≤100)a(-100 \leq a_i \leq 100)a(−100≤ai​≤100) ,问是否能向 aaa 中添加整数,使其变成一个不超过 3003

月阁 963

Codeforces Round 676 完整题解

A.XORwice 题意: 给定a,b,你可以随机选择一个数x,求(a⊕x)+(b⊕x)的最小值。 题解: 在二进制上每一位考虑,如果某一位都是1或0,那么x的这一位就是0,如果一个是1,一个是0,那么他x不管怎么选这一位都会留下。这个过程跟异或是一样的,所以就是a^b。 int main() { for(scanf("%d",&_);_;_--){ a=rd();b=rd(); printf("%lld\n",a^b); } return 0

CallmeChallenger的博客 486

Codeforces Round #676(Div. 2) A,B,C,D

文章目录A. XORwiceB. Putting Bricks in the WallC. PalindromifierD. Hexagons A. XORwice 要使值最小,我们要尽可能将1变成0,如果一个位上ai与bi不同,那么无论x这位取什么都没有影响,如果同为0,那么取0,如果同为1,取1。 #include <iostream> #include <stdio.h> #include <cstring> #include <algorithm> u

hhhcbw的博客,欢迎各位来访 198

Codeforces Round #676 (Div. 2)(A-D)

A. XORwice(思维+位运算) B. Putting Bricks in the Wall(思维+构造) C. Palindromifier(思维+构造) D. Hexagons(思维+变形矩阵)

代码笔记本 289
上一篇: 2020浙江省ACM省赛后记
下一篇: Codeforces Round #678 (Div. 2)A-E题解
StandNotAlone
博客等级 码龄7年 338粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值