【CodeForces - 768C】Jon Snow and his Favourite Number(思维,技巧,套路,数学异或,循环节,trick)

题干:

Jon Snow now has to fight with White Walkers. He has n rangers, each of which has his own strength. Also Jon Snow has his favourite number x. Each ranger can fight with a white walker only if the strength of the white walker equals his strength. He however thinks that his rangers are weak and need to improve. Jon now thinks that if he takes the bitwise XOR of strengths of some of rangers with his favourite number x, he might get soldiers of high strength. So, he decided to do the following operation k times:

  1. Arrange all the rangers in a straight line in the order of increasing strengths.
  2. Take the bitwise XOR (is written as ) of the strength of each alternate ranger with x and update it's strength.

Suppose, Jon has 5 rangers with strengths [9, 7, 11, 15, 5] and he performs the operation 1 time with x = 2. He first arranges them in the order of their strengths,[5, 7, 9, 11, 15]. Then he does the following:

  1. The strength of first ranger is updated to , i.e. 7.
  2. The strength of second ranger remains the same, i.e. 7.
  3. The strength of third ranger is updated to , i.e. 11.
  4. The strength of fourth ranger remains the same, i.e. 11.
  5. The strength of fifth ranger is updated to , i.e. 13.

The new strengths of the 5 rangers are [7, 7, 11, 11, 13]

Now, Jon wants to know the maximum and minimum strength of the rangers after performing the above operations k times. He wants your help for this task. Can you help him?

Input

First line consists of three integers nkx (1 ≤ n ≤ 105, 0 ≤ k ≤ 105, 0 ≤ x ≤ 103) — number of rangers Jon has, the number of times Jon will carry out the operation and Jon's favourite number respectively.

Second line consists of n integers representing the strengths of the rangers a1, a2, ..., an (0 ≤ ai ≤ 103).

Output

Output two integers, the maximum and the minimum strength of the rangers after performing the operation k times.

Examples

Input

5 1 2
9 7 11 15 5

Output

13 7

Input

2 100000 569
605 986

Output

986 605

题目大意:

   给你一组数,进行k组操作,每组操作中包含两个步骤,首先排序,然后对下标为奇数的数字进行异或操作。最后问你进行k组操作之后的数组中的最大值和最小值。

解题报告:

不是我就想知道这题打死也想不到会出现循环节的情况吧??!!?这也太、、可能这是异或运算的一种特性?反正我是第一次遇到,题目中会猜他存在循环节然后进行暴力的。。。然后,循环节是4不是2、所以其实代码中的(ci-3)是不需要进行判断的。(所以对于这种不知道循环节是几的这种题,保险起见建议那种精彩代码,直接Node结构体记录曾经算过的状态,并且用vector存下来!!技巧啊)

AC代码:

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
int a[MAX];
int mx[MAX],mi[MAX];
int main()
{int n,k,x,ci;cin>>n>>k>>x;mx[0]=0,mi[0]=100005;for(int i = 1; i<=n; i++) scanf("%d",a+i),mx[0] = max(mx[0],a[i]),mi[0] = min(mi[0],a[i]);for(ci = 1; ci<=k; ci++) {sort(a+1,a+n+1);mx[ci] = -100005;//a[n];是错的 mi[ci] = 100005;//a[1];是错的 for(int i = 1; i<=n; i++) {if(i&1) a[i] = a[i] ^ x;mi[ci] = min(a[i],mi[ci]);mx[ci] = max(a[i],mx[ci]);}if(ci > 4) {if(mi[ci] == mi[ci-1] && mi[ci] == mi[ci-2] && mi[ci] == mi[ci-3] && mi[ci] == mi[ci-4])if(mx[ci] == mx[ci-1] && mx[ci] == mx[ci-2] && mx[ci] == mx[ci-3] && mx[ci] == mx[ci-4]) {printf("%d %d\n",mx[ci],mi[ci]);return 0 ;}}}
//	sort(a+1,a+n+1);printf("%d %d\n",mx[ci-1],mi[ci-1]);return 0 ;}

1WA代码:

   需要i++,而不是i+=2直接做,因为你想啊,你这一轮操作的mx和mi,都是所有数字的,而不是选出来那些数的啊!!另外,不能直接每次都mx[ci] = a[n]这样,因为这一轮操作之后可能就没有这个最大值了,可能就被覆盖成别的值了。,。。所以说啊,写代码的时候一定要注意是否代码中存在小问题,这些问题叠加到一块就很致命了!!

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
int a[MAX];
int mx[MAX],mi[MAX];
int main()
{int n,k,x,ci;cin>>n>>k>>x;mx[0]=0,mi[0]=100005;for(int i = 1; i<=n; i++) scanf("%d",a+i),mx[0] = max(mx[0],a[i]),mi[0] = min(mi[0],a[i]);for(ci = 1; ci<=k; ci++) {sort(a+1,a+n+1);mx[ci] = -100005;//a[n];是错的 mi[ci] = 100005;//a[1];是错的 for(int i = 1; i<=n; i+=2) {//这样写应该也是错的 a[i] = a[i] ^ x;mi[ci] = min(a[i],mi[ci]);mx[ci] = max(a[i],mx[ci]);}if(ci > 4) {if(mi[ci] == mi[ci-1] && mi[ci] == mi[ci-2] && mi[ci] == mi[ci-3] && mi[ci] == mi[ci-4])if(mx[ci] == mx[ci-1] && mx[ci] == mx[ci-2] && mx[ci] == mx[ci-3] && mx[ci] == mx[ci-4]) {printf("%d %d\n",mx[ci],mi[ci]);return 0 ;}}}sort(a+1,a+n+1);printf("%d %d\n",a[n],a[1]);return 0 ;}

 

另一个精彩的代码:

把每次变化的都存起来。然后得到一个新的状态的时候,先去跟之前存起来的那些状态比较,如果发现又相同的状态,那么就表示找到了循环节了。

之后求出来循环节的长度,然后取模,得到最后的答案。

(代码中可以直接return 0的,不需要goto,因为是codeforce的题。、。。)

#include <bits/stdc++.h>using namespace std;
const int MAXN=1e5+7;
int n,k,x;
int cnt;
struct node { //用来存储已经出现过的状态int num[MAXN];int MAX;int MIN;node() {MAX=0;MIN=1e9;}bool operator ==(const node &a)const {for(int i=0; i<n; ++i) {if(a.num[i]!=num[i])return 0;}return 1;}
} p;
vector<node>q;
int check() {for(int i=0; i<cnt; ++i) {if(q[i]==p)return i;}return -1;
}
int main() {int i;
xx:while(~scanf("%d%d%d",&n,&k,&x)) {q.clear();p.MAX=0;p.MIN=1e9;for(i=0; i<n; ++i) {scanf("%d",&p.num[i]);p.MAX=max(p.MAX,p.num[i]);p.MIN=min(p.MIN,p.num[i]);}sort(p.num,p.num+n);q.push_back(p);cnt=0;int pos;while(cnt<k) {cnt++;p.MAX=0;p.MIN=1e9;for(i=0; i<n; i+=2) {p.num[i]^=x;}for(i=0; i<n; ++i) {p.MAX=max(p.MAX,p.num[i]);p.MIN=min(p.MIN,p.num[i]);}sort(p.num,p.num+n);pos=check();if(pos!=-1) { //找到循环节了int t=cnt-pos;//循环节长度k=(k-pos)%t+pos;//取模之后的答案的下标printf("%d %d\n",q[k].MAX,q[k].MIN);goto xx;//找到了就直接重新读取下一组}q.push_back(p);}printf("%d %d\n",p.MAX,p.MIN);//表示没有找到循环节}return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c 语言定义2维字符串数组赋值,二维数组赋值字符串 c 语言 二维字符串数组赋值问题...

C语言中二维字符数组应该怎样赋值&#xff1f;c语言二维数组如何定义字符串&#xff1f;&#xff1f;&#xff1f;&#xff1f;急。。。二维字符数组的定义格式为&#xff1a;char 数组名[第一维大小][第二维大小]; 例如&#xff1a;char c[3][10]; //定义了一个3行10列的二维字…

qt android wifi,QtScrcpy: Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限...

QtScrcpyQtScrcpy可以通过USB(或通过TCP/IP)连接Android设备&#xff0c;并进行显示和控制。不需要root权限。单个应用程序最多支持16个安卓设备同时连接。同时支持GNU/Linux&#xff0c;Windows和MacOS三大主流桌面平台它专注于:精致 (仅显示设备屏幕)性能 (30~60fps)质量 (19…

android 添加so,Android studio 中添加 .so 文件

场景&#xff1a;Android studio 编译我的项目(项目中有运用的jni)&#xff0c;编译没有报错&#xff0c;正常的安装到我的机器上&#xff0c;可是运行的时候就报错&#xff0c;没有找到*.so文件...可是明明在libs&#xff0c;目录下有加相关的文件&#xff1f;参考网上大部分的…

投票抵制华为鸿蒙系统,网友投票华为十大技术:鸿蒙OS仅排第二!

作为国内消费电子巨头&#xff0c;华为的技术实力是有目共睹的&#xff0c;在过去的一年发布的许多黑科技让人眼前一亮&#xff0c;那么今日(17日)消息&#xff0c;华为终端今天表示&#xff0c;此前向粉丝们征集票选过去这一年里大家最关注的十大功能技术。最终&#xff0c;收…

平板android怎么玩电脑游戏,Android平板模拟家用主机游戏教程_小米 平板_平板电脑新闻-中关村在线...

一、NESoid看完了上一页Windows系统模拟器介绍的网友应该能得出一个经验&#xff0c;一般模拟器的名称都和其模拟的游戏主机名称比较类似&#xff0c;所以很多模拟器都可以通过其名称判断出它到底是模拟谁的。比如这款NESoid&#xff0c;看名字就知道是模拟NES主机&#xff0c;…

华为nova 7 se鸿蒙,荣耀v40和华为Nova7Pro哪个好-参数对比-更值得入手

荣耀v40已经发布&#xff0c;今天小编给大家带来荣耀v40和华为Nova7Pro参数详细分析&#xff0c;这两款手机有什么区别&#xff0c;哪一个更加值得入手呢&#xff0c;一起来看看吧一、参数对比迷你手机网荣耀v40​华为Nova7Pro手机外形屏幕尺寸6.72英寸6.57屏幕材质OLEDOLED刷新…

【牛客 - 318M】被打脸的潇洒哥(几何问题,水题,结论,知识点)

题干&#xff1a; 平面上有n个圆&#xff0c;求使这n个圆两两相交&#xff08;即每两个圆之间恰好有两个交点&#xff09;后最多能把平面划分成多少个区域。 输入描述: 一个正整数t&#xff0c;表示有t(1≤t≤100)组数据。 接下来t行&#xff0c;每行一个整数n(0≤n≤…

html边框自动变颜色,css怎么设置边框颜色?

元素外边距内就是元素的的边框 (border)。元素的边框就是围绕元素内容和内边据的一条或多条线。每个边框有 3 个方面&#xff1a;宽度、样式&#xff0c;以及颜色。下面我们就来看一下css设置边框颜色的方法。css可以使用border-color属性来设置边框颜色。border-color 属性是一…

【牛客 - 289 I】这是一个沙雕题I (字符串问题,水题)

题干&#xff1a; 因为毒瘤出题人出的题都太难了&#xff0c;于是gugugu打算出一个签到题&#xff0c;&#xff08;就是这题啦&#xff09;&#xff0c;这题很简单&#xff0c;给定一个字符串&#xff0c;请问你重新排序后能不能组成K个相同的字符串。 输入描述: 多组数据输…

codesys 串口通讯实例_常见的PLC程序实例,车库自动门的PLC控制!

点击箭头处“工业之家”&#xff0c;选择“关注公众号”&#xff01;PLC控制车库自动门实例车库自动门控制(1)明确系统控制要求系统要求车库门在车辆进出时能自动打开关闭&#xff0c;车库门控制结构如下图所示。系统控制具体要求如下&#xff1a;在车辆入库经过入门传感器时&a…

【CodeForces - 507B】Amr and Pins(思维贪心,几何问题)

题干&#xff1a; Amr loves Geometry. One day he came up with a very interesting problem. Amr has a circle of radius r and center in point (x, y). He wants the circle center to be in new position (x, y). In one step Amr can put a pin to the border of t…

layui下拉框往上显示跟往下显示_牛肉价格持续攀升,潮汕牛肉火锅下月或将调涨了...

广东人喜欢的潮汕牛肉火锅&#xff0c;近期要调涨了&#xff01;8月25日&#xff0c;记者从广东餐饮业获悉&#xff0c;国内牛肉持续两个多月上涨&#xff0c;牛肉原材料涨价的压力现已传导到下游餐饮&#xff0c;尤其是以牛肉为主原料的牛肉火锅店&#xff0c;成本压力骤增&am…

linux yum自动挂载_Linux运维——升级系统相关漏洞

说明&#xff1a;最近公司漏扫部门扫出来一大批的漏洞&#xff0c;包括系统层、中间件层、以及应用层漏洞&#xff0c;今天先给大家分享下Linux系统层漏洞修复方案(OpenSSL、ssh、NTP等)&#xff0c;请看下面&#xff01;一、上传升级包&#xff1a;二、配置yum源&#xff1a;本…

华为鸿蒙beta版发布会,华为HarmonyOS手机体验鸿蒙版微博:仅9.1MB 附华为鸿蒙发布会直播入口...

华为 HarmonyOS 手机体验鸿蒙版微博&#xff0c;只有 9.1MB&#xff0c;完全无广告、无各种附加&#xff0c;比微博国际版还要干净&#xff0c;如果你的手机升级了鸿蒙系统&#xff0c;不妨尝试尝试。总体来说&#xff0c;这是鸿蒙版微博 1.0 &#xff0c;其标识是含 HarmonyOS…

html动态散花代码,IOS实现签到特效(散花效果)的实例代码

本文讲述了IOS实现签到特效(散花效果)实例代码。分享给大家供大家参考&#xff0c;具体如下&#xff1a;散花特效#import /// 领取奖励成功interface RewardSuccess : NSObject/*** 成功动画*/ (void)show;end#import "RewardSuccess.h"#import "RewardSuccessW…

小程序中input标签没有反应_鸢尾花预测:如何创建机器学习Web应用程序?

全文共2485字&#xff0c;预计学习时长12分钟图源&#xff1a;unsplash数据科学的生命周期主要包括数据收集、数据清理、探索性数据分析、模型构建和模型部署。作为数据科学家或机器学习工程师&#xff0c;能够部署数据科学项目非常重要&#xff0c;这有助于完成数据科学生命周…

潢川高中2021高考成绩查询,潢川高中2020年秋季学期高一期中考试成绩分析

潢川高中2020年秋季学期高一期中语文试卷分析分析人&#xff1a;李四海本次试卷结构与高考试卷结构一致&#xff0c;局部作了调整。如默写由6分增到10分&#xff0c;散文阅读由15分压到13分&#xff0c;文言文翻译共8分。经学科组集体讨论&#xff0c;作如下分析&#xff1a;一…

win10安装ensp启动40_装系统不求人,快速制作启动U盘,傻瓜式重装WIN10

在以前如果我们的电脑系统损坏&#xff0c;无法进入WINDOWS系统&#xff0c;在需要重装WINDOWS系统时&#xff0c;一般的做法是&#xff0c;下载一个WINDOWS系统镜像&#xff0c;制作一个PE启动盘&#xff0c;在PE里安装系统镜像。这样传统的WINDOWS系统重装过程麻烦且耗时。而…

如何拆计算机主机箱,一种方便拆卸的计算机主机箱的制作方法

本发明涉及计算机设备技术领域&#xff0c;具体为一种方便拆卸的计算机主机箱。背景技术&#xff1a;计算机主机指计算机硬件系统中用于放置主板及其他主要部件的容器&#xff0c;通常包括CPU、内存、硬盘、光驱、电源、以及其他输入输出控制器和接口&#xff0c;如控制器、显卡…

java word转html 乱码 poi,java word转html poi

java word转html poi[2021-01-29 15:50:39] 简介:php去除nbsp的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#xff1a;…