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

dos攻击 --hping3 dos使用hping3攻击 阅读详情

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;
	}
}

Devexpress16.2.6破解工具 Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具 立即下载

相关推荐

分享一个N-MOS管和P-MOS管驱动应用实例

大家好,我是『芯知识学堂』的SingleYork,今天给大家分享一下MOS管驱动相关的知识。 MOS管在电路设计中是比较常见的,按照驱动方式来分的话,有两种,即:N-MOS管和P-MOS管。MOS管跟三极管的驱动方式有点类似,但又不完全相同,那么今天笔者将会给大家简单介绍一下N-MOS管和P-MOS管的工作原理,并结合自己实际的应用来给大家分享一下如何来驱动N-MOS管和P-MOS管。 首先,我们先来看一下N-MOS管和P-MOS管分别在电路中的电气符号: 咋一看上面两个电气符号,似乎非常的相似,可能让很

『芯知识学堂』SingleYork 的博客 3万+

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

Android TV远程调试全攻略:从开发者模式开启到ADB连接(附常见问题排查)

本文提供了一份详尽的Android TV远程调试实战指南,涵盖从开启开发者模式、配置网络ADB连接到高效调试与深度排错的完整流程。文章重点解析了通过Wi-Fi进行远程调试的核心步骤,并针对常见的连接失败、授权问题等提供了系统性的解决方案,旨在帮助开发者为Android TV应用开发构建稳定高效的调试环境。

1341

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

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

weixin_42022728的博客 5519

中小型微服务系统 硬件设备如何部署,QPS大概多少

作为一名合格的开发工程师,不仅仅要在前期开发阶段对业务和技术有深入了解,知道选用哪种合适的技术,业务如何拆分,还要思考后期线上环境,资源,延迟,性能等如何优化维护以及分布式系统一些线上生产的一些问题。 本篇主要针对之前了解的情况对硬件设备资源做一个简单的介绍: 首先分布式系统线上实践问题,我们应该对公司的流量,各个服务,网管,注册中心应该如何部署,部署多少台机器才合适,每台机器的配置如何,每天整体流量有多少,高峰期的请求量有多少,你的整体系统是否扛得住(注:很多公司现在直接使用K8S docker 实现

wangxuelei036的博客 1万+

FPGA音频处理入门:手把手教你用Verilog实现I2S接收模块(附完整代码)

本文详细介绍了如何使用Verilog在FPGA上实现I2S接收模块,涵盖I2S协议原理、Verilog架构设计、完整代码实现及优化技巧。通过实战案例,帮助开发者快速掌握数字音频处理技术,适用于嵌入式音频系统开发。

weixin_30335575的博客 417

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

Telegram AI Bot自动化实战:5步用Make搭建业务工作台

Telegram Bot 是一种轻量级、高抵达率的消息自动化载体,其核心价值在于将结构化消息(如text、photo、callback_query)转化为可编程的事件流。基于 Bot API 的简洁设计与 Webhook 机制,开发者无需复杂鉴权即可实现毫秒级响应。结合低代码平台 Make,可快速构建具备上下文识别、条件路由、多系统分发与错误熔断能力的自动化流程。该方案特别适用于客服分发、数据同步、IoT告警等高频、规则明确、需即时反馈的业务场景,显著降低对 Python/Node.js 编程与 DevOp

weixin_33158887的博客 300

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

零基础入门红外与可见光图像融合:DAF-Net 实战全指南

本文介绍了基于DAF-Net的红外与可见光图像融合技术,主要内容包括:技术原理、环境配置、数据准备和模型实现。DAF-Net通过双分支特征提取和动态注意力融合机制,有效结合红外图像的热辐射信息与可见光图像的纹理细节。文章详细讲解了开发环境搭建步骤(Python 3.8+PyTorch),TNO数据集的预处理方法,并提供了完整的DAF-Net实现代码,包含特征提取、注意力融合和图像重建三个关键模块。该技术可广泛应用于安防监控、自动驾驶等领域,帮助开发者快速入门多模态图像融合。

FJN110的博客 123

电商行业分析爬虫:抓取行业数据,进行行业分析

电商行业数据分析对于市场研究、竞争分析和商业决策至关重要。通过爬取电商平台的数据,我们可以深入了解市场动态、消费者行为和商品销售情况。本文将介绍如何构建一个电商行业分析爬虫,抓取商品信息、销售数据和用户评价等,并进行数据分析。

u014481728的博客 1628

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

2026 拉勾网:JA4+指纹绕过 + sign逆向 + 动态城市参数,月采集10万+数据实战

2026年拉勾网反爬技术全面升级,采用JA4+ TLS指纹识别、动态sign签名等多维度防护体系。本文提供工业级爬虫解决方案,通过curl_cffi模拟浏览器指纹、逆向sign加密算法、动态生成城市参数三大核心技术,实现高效稳定的数据采集。系统采用分层架构设计,包含任务调度、签名生成、多线程引擎等模块,单月可获取10万+条招聘数据。重点解析了JA4+指纹识别原理、传统方法的局限性,以及通过HMAC-SHA256算法逆向sign参数的完整过程。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2393

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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、付费专栏及课程。

余额充值