Potato的暑期训练day#1题解 ——毒瘤构造

Potato的暑期训练day#1 ——毒瘤构造

题目链接:

A.https://vjudge.net/problem/HDU-1214

B.https://vjudge.net/problem/CodeForces-1174D

C.https://vjudge.net/problem/CodeForces-1166E

D.https://vjudge.net/problem/HihoCoder-1873

F.https://vjudge.net/problem/CodeForces-1159D

G.https://vjudge.net/problem/CodeForces-1130E

A - 圆桌会议

题意:对一个1,2,3,....n构成的圆桌进行操作,每次只能交换相邻两位,提问最少需要多少次操作可以是的这个圆桌的位置转置,即每个人左边和右边的人交换了

思路:考虑1,2,3,4,..n的线性排序经过相邻交换的操作到达n-k-1 n-k-2 ....3 2 1 n n-1 n-2........ n-k这样的排序的最少步数,转化为以上的排序何时逆序对最少,显然在中间的时候,对于每一段长度为k的逆序对总和可以使用 \(k(k-1)/2\) 计算

代码:

#include<bits/stdc++.h>
using namespace std;
int N;
int main() {while(scanf("%d",&N) != EOF) {if(N%2 == 0) {printf("%d\n",N/2*(N/2-1));}else {int k = N/2;printf("%d\n",k*(k-1)/2+k*(k+1)/2);}}return 0;
}                                  

B - Ehab and the Expected XOR Problem

题意:对于n,x要求我们给出一个数组a该数组内任意一段的异或都不为0和x,并且让这个数组长度尽量长,(数组元素满足\([1.2^n)\) 的范围,(1≤n≤18, 1≤x<2^18)

思路:我们考虑这个数组的前缀异或和S(n);我们可以得到这样一个性质S(i)^S(j) = a(j+1)a(j+2)....a(i) 也就是说我们任意一段的连续异或和都可以表示为他的前缀异或和的异或,那么问题就转化为我要构造一个S数组,其任意两个的异或和不为0或者x,我们知道a的范围满足\([1.2^n)\) 那么有异或的性质可知任意两个S不相等(相同的数异或和为0)且S的范围与a相同,那么我们分为两种情况,第一种\(x>=2^n\) 即无论我如何异或均不考虑x,那么输出即为[1.2^n)的所有数,第二种\(x<2^n\) 时我们就不能在S中找出m,n使得m^n = x ,我们知道这个东西对于每一个固定的m的n的解是唯一的所以可以直接扫一遍做m,n的vis输出即可

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = (1<<18)+5;
int n,x;
int S[maxn];
bool vis[maxn];
int main() {scanf("%d%d",&n,&x);int pre;if(x>=(1<<n)) {printf("%d\n",(1<<n) - 1);int len = (1<<n);for(int i = 1;i < len;i++) {if(i == 1) {printf("%d ",i);pre = i;}else {printf("%d ",pre^i);pre = i;}}} else {memset(vis,0,sizeof(vis));printf("%d\n",((1<<n) - 1) / 2 );int len = (1<<n) - 1;int cnt = 0;for(int i = 1;i <= len;i++) {if(!vis[i] && i != x) {S[cnt++] = i;vis[i] = true;int b = i^x;vis[b] = true;}}for(int i = 0;i < cnt;i++) {if(i == 0) {printf("%d ",S[i]);pre = S[i];}else {printf("%d ",pre^S[i]);pre = S[i];}}}return 0;
}

C - The LCMs Must be Large

题意:对于一个长为n的常数数组,我们有m天,每m天取不同的下标的数做一次LCM, 要求判断是否存在这样的数组使得我们每次取出的LCM都大于剩下的数的LCM

思路:考虑到LCM是一个很取决于其中最大的一个数的函数,我们只要能保证我们的m天中任意两天我们都能够找到有至少一个公共元素,我们总可以去取一个很大的数使得其大于剩余元素的LCM且不矛盾,所以直接\(O(m^2n)\) 暴力判断即可

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxm = 55;
const int maxn = 1e4+5; 
int m,n;
bool vis[maxm][maxn];
int main() {scanf("%d%d",&m,&n);int s,x;memset(vis,0,sizeof(vis));for(int i = 0;i < m;i++) {scanf("%d",&s);for(int j = 0;j < s;j++) {scanf("%d",&x);vis[i][x] = true;}}bool flag;for(int i = 0;i < m;i++) {for(int j = 0;j < m;j++) {if(i != j) {flag = false;for(int k = 1;k <= n && !flag;k++) {if(vis[i][k]&&vis[j][k]) flag = true;}}if(!flag) {printf("impossible\n");return 0;}}}printf("possible\n");return 0;
}

D - Frog and Portal

题意:有0-200个荷叶,有一只青蛙起始位于标号0的荷叶上,我们很任意知道青蛙到荷叶的方案数满足斐波那契数列,现在我们给出一个m代表到200的方案数,让我们通过添加传送门来达到这个方案数,输出传送门的数量和起点终点。

思路:先考虑200之前的几个位置到200 的方案数,例如199到200为1,198为2,197为3,196为5.....显然也是满足斐波那契数列的,我们考虑一个m为7 的情况,我们知道7可以由斐波那契数列中的5+2得到,即196和198两个位置,现在我们通过构造前面的传送门来,我们通过奇数传送门构造,这里我们就取前两个奇数1,3,但是我们要注意我们总的方案数还要加上到1,3 的方案,所以我们可以在4处放一个到自己的传送门,这样就使得到1,3只有一种方案,以此类推我们可以得到所有情况(我们可以大概知道一个数总可以由几个斐波那契数列的和组成)

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll M;
ll fib[205];
ll ans[205];
void init() {fib[200] = fib[199] = 1;for(int i = 198;i >= 150;i--) fib[i] = fib[i+1] + fib[i+2];
}
int main() {init();int cnt;while(scanf("%lld",&M) != EOF) {if(M == 0) {printf("2\n1 1\n2 1\n");}else {cnt = 0;for(int i = 150;i<=200;i++) {if(M==0) break;if(M - fib[i]>=0) {M-=fib[i];ans[cnt++] = i;}}printf("%d\n",cnt+1);for(int i = 0;i < cnt;i++) {printf("%d %lld\n",2*i + 1,ans[i]);}printf("%d %d\n",2*cnt,2*cnt);}}return 0;
}

F - The minimal unique substring

题意:给出n,k要求求出一个长度为n的01串其唯一字串的最小长度为k

思路:首先我们先观察三个串 1010,110110,11101110,答案都是01部分,我们可以下一个结论,形如 abab ( a 中有非负整数个 1 , b 中只有一个 0 )这类的字符串答案恒为 2 ,也就是 k==2 ,然后就是用这类字符串去构造出我们所需的 k 。我们可以尝试从末尾加一个1,那么之前的串变成了 10101,1101101,111011101,那么答案为010部分。我们可以发现,通过我们末尾添加的1,导致之前部分的 01 与我们末尾添加的1与前面一个0构成的 01 重复,使得之前的部分向后挪一位。于是,我们可以用这一规律去构造出我们想要的k,显然答案就是末尾部分的01(部分111...10111...10111)满足 0 的个数加 1 的个数等于 k-1 ,那么对中间的影响(部分111...1011111...110111)往后挪一位也就是我们的答案 k ,最后就是算出这形如 abab 字符串 a 部分中的 1 的个数有多少就行了,设 x 为 a 中 1 的个数,方程为 2*x+1+k-1=n ,化简为 x=(n-k)/2 ,根据题意 n 与 k 同奇偶,那么 x 也是唯一确定的,最后构造也由此生成。

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {int n,k;int x = (n - k) / 2;cin>>n>>k;for(int i=0,j=(n-k)/2;i<n;i++){if(j)   cout<<1,j--;else cout<<0,j=(n-k)/2;}return 0;
}

G - Wrong Answer

题意:对一组数考虑一个区间和*区间长度的最大值,给出一个k,使得真正的最大值和

function find_answer(n, a)# Assumes n is an integer between 1 and 2000, inclusive# Assumes a is a list containing n integers: a[0], a[1], ..., a[n-1]res = 0cur = 0k = -1for i = 0 to i = n-1cur = cur + a[i]if cur < 0cur = 0k = ires = max(res, (i-k)*cur)return res

的做法求出的最大值差为k,构造这样的一组数(1≤n≤2000 and |a|≤1e6.k<=1e9)

思路:我们知道数组长度最大为2000,那么我们就来构造一个长度为2000的数组,其前1998均为0,最后两位为y<0,x>0,那么要满足2000(y+x) =k+x,即这两个答案之间差k,则y=(k-1999x)/2000,要使得y<0,则1e9-1999x为负数,那么我们可以取x=1e6-k%2000;即可

#include<bits/stdc++.h>
using namespace std;
int main() {int k;scanf("%d",&k);printf("2000\n");for(int i = 1;i<=1998;i++) printf("0 ");int x = 1e6 - k%2000;int y = (k - 1999*x) / 2000;printf("%d %d",y,x);
}

转载于:https://www.cnblogs.com/pot-a-to/p/11135027.html

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

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

相关文章

指针08 - 零基础入门学习C语言48

第八章&#xff1a;指针08 让编程改变世界 Change the world by program 返回指针值的函数 一个函数可以带回一个整型值、字符值、实型值等&#xff0c;也可以带回指针型的数据&#xff0c;即地址。 其概念与以前类似&#xff0c;只是带回的值的类型是指针类型而已。 这种…

算法中的递归分析和分治法的原理

分析递归算法三种方法替换法、迭代法、通用法&#xff08;master method&#xff09;作用&#xff1a;分析递归算法的运行时间分治算法将一个问题分解为与原问题相似但规模更小的若干子问题&#xff0c;递归地解这些子问题&#xff0c;然后将这些子问题的解结合起来构成原问题的…

ps4连接r星服务器稳定,移植到不同平台的《GTA5》有什么变化?与八年前相比,差距这么大...

经历过多次移植的GTA5&#xff0c;这些年都产生了哪些变化呢&#xff1f;当年首次登上PS3平台的GTA5&#xff0c;展现出无数玩家羡慕的精彩时刻&#xff0c;但好景不长&#xff0c;PS4就发布了&#xff0c;而且成功了代替了PS3&#xff0c;成为了GTA5玩家的主力军主机&#xff…

关于pycharm+opencv没有代码提示的问题解决方法记录

代码可以看出实际我们引入的应该是cv2.cv2下面. 所以我们代码只需要import cv2.cv2 as cv 即可. 记着要重新启动下pycharm哦. 可以参考:https://blog.csdn.net/az9996/article/details/90546827 转载于:https://www.cnblogs.com/lovesKey/p/11135185.html

17款开源论坛系统/Forum Software(转载)

phpBB phpBB具有友好的用户界面&#xff0c;简单易懂的管理面板和FAQ。你可采用PHPMySQL,MS-SQL,PostgreSQL或Access/ODBC数据库来搭建自己的论坛系统。 OPB OPB是采用PHP5与MySQL开发的PHP开源论坛系统。支持多层Forum结构&#xff0c;提供复杂的内容与版主控制选项&#xff0…

PHP安全笔记

1、 Magic Quotes选项 PHP.INI中中有三个以magic_quotes_开头的选项 magic_quotes_gpc如果是On的话&#xff0c;就会自动用‘\’转义从GET,POST,COOKIE来的数据&#xff0c;这是为什么我们想在URL中输入 ; show tables;--有时候失败的原因&#xff0c;因为被转义了呗…

Web前端开发CSS基础(2)

CSS 层叠样式表(英文全称&#xff1a;Cascading Style Sheets),是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化,并且能够对网页中元…

消息摘要算法-MAC算法系列

为什么80%的码农都做不了架构师&#xff1f;>>> 一、简述 mac&#xff08;Message Authentication Code&#xff0c;消息认证码算法&#xff09;是含有密钥散列函数算法&#xff0c;兼容了MD和SHA算法的特性&#xff0c;并在此基础上加上了密钥。因此MAC算法也经常…

对Xml文档进行操作(修改,删除)

<?xml version"1.0" encoding"utf-8"?><Products> <Product id"0" proName"aa1" proPrice"12" proInfo"bb"> </Product> <Product id"1" proName"电脑" pro…

获取真实IP

真正的取真实IP地址及利弊(转自百度空间)目前网上流行的所谓“取真实IP地址”的方法&#xff0c;都有bug&#xff0c;没有考虑到多层透明代理的情况。 多数代码类似&#xff1a; string IpAddress (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR&q…

Java 中的位运算

移位运算符 包括&#xff1a; “>> 右移”&#xff1b;“<< 左移”&#xff1b;“>>> 无符号右移” 例子&#xff1a;-5>>3-11111 1111 1111 1111 1111 1111 1111 10111111 1111 1111 1111 1111 1111 1111 1111其结果与 Math.floor((double)-5/(…

[转]C++中的三种继承public,protected,private

链接&#xff1a;http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/23/2514964.html

软件开发七宗罪

导读&#xff1a;一起来看看世界各地的程序员们所共有的致命通病&#xff0c;从软件开发的地狱中拯救自己。这七宗罪你有几条&#xff1f; 想成为一名优秀的软件开发人员需要很长时间的培训和实践。但是如果不遵循合适的原则&#xff0c;即便是再好的程序员也会成为失败的牺牲品…

Spring Boot:快速入门教程

什么是Spring Boot? Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。简而言之&#xff0c;Spring Boot通过提供默认配…

loadruner11 socket脚本-10053错误

背景: socket 10053异常&#xff1a;软件主动放弃一个连接&#xff0c;原因是超时或协议错误。如果LR客户端报10053异常&#xff0c;说明LR在执行套接字操作时&#xff0c;发生通信超时、网络中断或其它异常&#xff0c;主动将Socket连接断开。也就是说&#xff1a;10053异常是…

万网独享主机Apache为Ecshop商城添加404页面详解

在博客园基本都是做看客的角色&#xff0c;自己基本都没写过文章&#xff0c;不过昨天的经历确实让我有想法了&#xff0c;因为在网络上面看了很多文章&#xff0c;每篇写的都相对较片面&#xff0c;对于我这个Linux新手来说不免有点分不清东南西北&#xff0c;一不小心就浪费了…

移动微技(Mobile Widget)应用开发权威指南

移动微技&#xff08;Mobile Widget&#xff09;应用开发权威指南 基本信息 作者&#xff1a; 程宝平 杨晓华 朱春梅 丛书名&#xff1a; 中国移动创新系列丛书 出版社&#xff1a;电子工业出版社 ISBN&#xff1a;9787121104527 上架时间&#xff1a;2010-4-19 出版日…

[转载]Informix Dynamic Server维护手册

转载于:https://www.cnblogs.com/zgqjymx/archive/2011/03/06/1972733.html

Java反编译器Java Decompiler

Java Decompiler不仅为Windows、Linux、OSX系统提供GUI程序JD-GUI&#xff0c;而且还提供了Eclipse插件JD-Eclipse&#xff0c;官方网站&#xff1a;http://java.decompiler.free.fr/转载于:https://www.cnblogs.com/heroking2000/archive/2009/10/12/1582120.html

alternatives命令使用方法

alternatives命令使用方法 alternatives是Linux下的一个功能强大的命令。仅仅能在root权限下运行。如系统中有几个命令功能十分相似&#xff0c;却又不能任意删除&#xff0c;那么能够用 alternatives 来指定一个全局的设置。alternatives经常使用于同一个系统中安装同一软件的…