[2020洛谷5月月赛Div1]中子衰变

2024-03-16 23:32
文章标签 2020 洛谷 中子 div1 衰变

本文主要是介绍[2020洛谷5月月赛Div1]中子衰变,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

中子衰变

题解

好水的题呀!

首先对于1到4是很容易手玩出来的,笔者懒得手玩5-8。

之后对于n为偶数的情况,我们发现我们后手构造一个对称的序列的话,是一定可以赢的,对方不可能比我方晚不能放,如果对方可以放,我方也一定可以放。

于是,我们尝试着把这个结论推广到n为奇数的情况上。可我们很快就发现,n为奇数,我们必定是先手,而这样的话,就可能构造出一个全为1或-1的序列,这样对方就赢了。不过我们发现,如果将中间为构造成-1的话,就可以过特殊策略的点了。

我们需要考虑一下如何处理中间位的情况,处理两边的序列对称的情况。

于是,我们就得到了一种新方法。我们在两边构造时,就构造一个相反的对称序列,而在中间,构造一个有一端为空,其它全为相同数字的奇序列。

  • 如果放在两边相反序列不挨着中间段的位置的话,就可以直接在对称位置放一个相反数,容易证明这种情况是一定满足的。
  • 而对于放在挨着空的一端的位置,如果它与中间序列相同的元素一样的话,就不能在对面构造相同元素,我们就只能将这个空填上,将中间序列的长度扩大。否则一定可以构造出一个相反的对称序列。
  • 如果他将这个空填上的话,容易发现,中间序列的两侧一定是空的,由于是相反的序列,就一定有至少一个位置可以用于扩大中间序列,我们找到一个填上就行了。

于是乎,我们就成功的找到这道题的必胜策略,再把可恶的交互题打一遍就可以了。

源码

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<bitset>
#include<set>
using namespace std;
#define MAXN 1500
typedef long long LL;
typedef pair<int,int> pii;
#define gc() getchar()
template<typename _T>
void read(_T &x){_T f=1;x=0;char s=gc();while(s>'9'||s<'0'){if(s=='-')f=-1;s=gc();}while(s>='0'&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=gc();}x*=f;
}
template<typename _T>
_T Fabs(_T x){return x<0?-x:x;}
int n,take_id,m;
bool a[MAXN][2],f[MAXN];
void fill(int place,int type){a[place][type]=a[place][type^1]=1;a[place-1][type^1]=a[place+1][type^1]=1;
}
bool check(){for(int i=1;i<=n;i++)if(!a[i][0]||!a[i][1])return 1;return 0;
}
signed main(){read(n);read(take_id);if(n==1){fflush(stdout);cout<<"1"<<endl;int place,type;read(place);read(type);return 0;}if(n&1){fflush(stdout);cout<<"1"<<endl;int place,type;int m=n/2,l=m+1,r=l,cc;while(check()){read(place);read(type);fill(place,type>0?1:0);if(!check())break;if(l==r&&place==l)cc=type;if(place==l||place==r){if(l>0&&!a[l-1][type]){fill(l-1,type>0?1:0);fflush(stdout);cout<<l-1<<" "<<type<<endl;}else if(r<=n&&!a[r+1][type]){fill(r+1,type>0?1:0);fflush(stdout);cout<<r+1<<" "<<type<<endl;}m--;l--;r++;}else if((place==l-1||place==r+1)&&type==cc){int p=(!a[l][cc])?l:r;fill(p,cc>0?1:0);fflush(stdout);cout<<p<<" "<<cc<<endl;m--;l--;r++;}else{fill(n-place+1,type>0?0:1);fflush(stdout);cout<<n-place+1<<" "<<-type<<endl;}}}else{fflush(stdout);cout<<"1"<<endl;int place,type;while(check()){read(place);read(type);fill(place,type>0?1:0);fflush(stdout);cout<<n-place+1<<" "<<type<<endl;fill(n-place+1,type>0?1:0);}}return 0;
}

谢谢!!!

这篇关于[2020洛谷5月月赛Div1]中子衰变的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817091

相关文章

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

洛谷 凸多边形划分

T282062 凸多边形的划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先整一个半成品,高精度过两天复习一下补上 #include <iostream>#include <algorithm>#include <set>#include <cstring>#include <string>#include <vector>#include <map>

能量项链,洛谷

解释:  环形dp问题还是考虑将环拉直,可以参考我上一篇文章:环形石子合并 [2 3 5 10 2] 3 5 10 将环拉直,[]内是一个有效的区间,可以模拟吸收珠子的过程,         如[2 3 5] <=>(2,3)(3,5)    2是头,3是中间,5是尾 len >= 3:因为最后[2 10 2]是最小的可以合并的有效区间 len <= n + 1因为[2 3

2020年SEO行业发展变化和趋势分析!

一、搜索引擎算法发展轨迹 第一阶段:人工目录(1997年-2001年“雅虎早期搜索模式”); 第二阶段:文本分析(2001年-2004年“以关键词和背景颜色一样,堆积大量关键词,就会有非常好的排名; 第三阶段:链接分析(2004年-2009年“以反向链接为核心算法的阶段”),这时行业内有句话是内容为王,外链为皇; 第四阶段:智能分析(2009年-现在“以满足用户人性化需求的用户浏览行为分析

2020年数据术语的故事

点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 2020年整个技术圈子要说话题最多的,应该是大数据方向。新感念层出不穷,数据湖概念就是其中之一。这篇文章是关于数据仓库、数据湖、数据集市、数据中台等一些列的概念和发展进程。希望给大家带来一个全面的感知。 本文作者:Murkey学习之旅、开心自由天使 本文整理:大数据技术与架构,未经允许不得转载。 如今,随着诸如互联网以及物联网等

汇总(三):2020年12月

1.mysql数据库中,字段类型为tinyint(1)的,在select时,不显示正常的数字而是true或false?  传送门

2020 1.1版本的idea中git的使用场景

1、克隆项目 File-->New-->Project from Version Control 2、拉取远程的分支到本地 右下角-->(Remote Branches)选定分支-->checkout 3、将master分支更新的代码合并至bry分支并提交到远程仓库    (目的:实时与master的最新代码保持一致) 右下角-->(Local Branches)checkout br

BUUCTF PWN wp--bjdctf_2020_babystack

第一步   checksec一下,该题是64位的,该题目大概率是一道栈溢出(因为题目里面提到了stack) 分析一下这个二进制保护机制: Arch: amd64-64-little 这表示二进制文件是为64位AMD处理器设计的,使用的是小端序(little-endian)格式。RELRO: Partial RELRO RELRO(Relocation Read-Only)是一种安全特性,旨

洛谷P5490扫描线

0是最小的数字,将一个线段看成一个区间,对于一个矩形,从下扫到上,入边为1,而出边为-1,意思是将这个区间上的所有点加1(区间修改).把线段表示为Line[i],其中记录了l,r,h,tag,左右端点,高度,入边还是出边(1或-1) 那么每次区间修改后不为0的区间它的值可能是1,2,3或者是其它数字,这不好统计,可以将它转化一下,0是不是表示没有被覆盖过的地方,我们只要统计0的个数然后用总长减去