吐槽:数据好像有点水,直接枚举到200可以得80 points。

另:我还是太弱了,比赛的时候只有90 points,#7死卡不过去,最后发现是没有判断 \(z_1\) 和 \(z_2\) 的范围……


Subtask 1:

Method:

直接输出4,完。


Subtask 2:

Method:

直接暴力枚举 \(x\) , \(y\) , \(z\) ,判断是否满足一下关系即可:

\[\forall i\in\left[1,n\right],s.t.\left |a_i-x\right|\bigoplus \left|b_i-y\right| \bigoplus \left|c_i -z\right|=9
\]

时间复杂度:\(O(nM^3)\) ( \(n\leq 5\) ,可以忽略 )

可以通过 \(60\%\) 的数据。

Code:

#include<bits/stdc++.h>
#define int long long
#define Maxn 10
using namespace std;
inline void read(int &x)
{
int f=1;x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
x*=f;
}
int n,M;
int ans=0;
int a[Maxn],b[Maxn],c[Maxn];
void solve1()
{
int flag=1;
for(int x=1;x<=M;x++)
{
for(int y=1;y<=M;y++)
{
for(int z=1;z<=M;z++)
{
for(int i=1;i<=n;i++)
{
if((((abs(a[i]-x))^(abs(b[i]-y)))^(abs(c[i]-z)))!=9)
{
flag=0;
break;
}
}
if(flag==1)
{
ans++;
}else
{
flag=1;
}
}
}
}
printf("%lld\n",ans);
return ;
}
signed main()
{
read(n),read(M);
for(int i=1;i<=n;i++)
{
read(a[i]);
read(b[i]);
read(c[i]);
}
ans=0;
if(M<=200)
{
solve1();
return 0;
}
}

Subtask 3:

**Method **:

考虑优化枚举。若满足一下的性质:

\[A\bigoplus B\bigoplus C=D
\]

则显然可以得到:

\[\begin{equation}
\begin{aligned}
& A\bigoplus B \bigoplus D\\
& =A \bigoplus B \bigoplus \left(A\bigoplus B\bigoplus C\right) \\
& = \left[\left(A \bigoplus B\right) \bigoplus \left(A\bigoplus B\right)\right]\bigoplus C\\
& \because x \bigoplus x=0,0\bigoplus x=x\\
& \therefore A \bigoplus B \bigoplus D =C
\end{aligned}
\end{equation}
\]

故只需要枚举 \(x\) 、\(y\) ,则:

\[\begin{equation}
\begin{aligned}
& \left|c_1-z\right|=\left|a_1-x\right|\bigoplus \left|b_1-y\right| \bigoplus 9
\end{aligned}
\end{equation}
\]

我们设

\[C=\left|a_1-x\right|\bigoplus \left|b_1-y\right| \bigoplus 9
\]

则:

\[z_1=c_1-C,z_2=c_1+C
\]

最后只需要判断一下 \(z_1\) 和 \(z_2\) 是否满足以下性质即可:

\[\forall i\in \left[2,n\right],s.t.\left |a_i-x\right|\bigoplus \left|b_i-y\right| \bigoplus \left|c_i -z_j\right|=9\text{且}z_j \in [1,M]\\
(j\in \{1,2\})
\]

时间复杂度:\(O(nM^2)\) ( \(n\leq 5\) ,可以忽略 )

Code:

#include<bits/stdc++.h>
#define int long long
#define Maxn 10
using namespace std;
inline void read(int &x)
{
int f=1;x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
x*=f;
}
int n,M;
int ans=0;
int a[Maxn],b[Maxn],c[Maxn];
map<int,int>mp;
void solve1()
{
int flag=1;
for(int x=1;x<=M;x++)
{
for(int y=1;y<=M;y++)
{
for(int z=1;z<=M;z++)
{
for(int i=1;i<=n;i++)
{
if((((abs(a[i]-x))^(abs(b[i]-y)))^(abs(c[i]-z)))!=9)
{
flag=0;
break;
}
}
if(flag==1)
{
ans++;
}else
{
flag=1;
}
}
}
}
printf("%lld\n",ans);
return ;
}
void solve2()
{
int flag1=1,flag2=1;
for(int x=1;x<=M;x++)
{
for(int y=1;y<=M;y++)
{
mp.clear();
int tmp=(((abs(a[1]-x))^(abs(b[1]-y)))^9);
int zkkk=c[1]-tmp;
int zwww=c[1]+tmp;
if(zkkk>=1&&zkkk<=M)
{
for(int i=2;i<=n;i++)
{
if((((abs(a[i]-x))^(abs(b[i]-y)))^(abs(c[i]-zkkk)))!=9)
{
flag1=0;
break;
}
}
if(flag1==1&&mp.find(zkkk)==mp.end())
{
ans++;
mp[zkkk]=1;
}else
{
flag1=1;
}
}else
{
flag1=1;
}
if(zwww>=1&&zwww<=M)
{
for(int i=2;i<=n;i++)
{
if((((abs(a[i]-x))^(abs(b[i]-y)))^(abs(c[i]-zwww)))!=9)
{
flag2=0;
break;
}
}
if(flag2==1&&mp.find(zwww)==mp.end())
{
ans++;
}else
{
flag2=1;
}
}else
{
flag2=1;
}
}
}
printf("%lld\n",ans);
return ;
}
signed main()
{
read(n),read(M);
for(int i=1;i<=n;i++)
{
read(a[i]);
read(b[i]);
read(c[i]);
}
ans=0;
if(M<=200)
{
solve1();
return 0;
}
else
{
solve2();
return 0;
}
}

洛谷 P5614题解的更多相关文章

  1. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码

    [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码 更坏的阅读体验 定义 对于给定的一个网络,有向图中每个的边权表示可以通过的最大流量.假设出发点S水流无限大,求水流到终点T后的最大流量. 起 ...

  2. 洛谷P5759题解

    本文摘自本人洛谷博客,原文章地址:https://www.luogu.com.cn/blog/cjtb666anran/solution-p5759 \[这道题重在理解题意 \] 选手编号依次为: \ ...

  3. 关于三目运算符与if语句的效率与洛谷P2704题解

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...

  4. c++并查集配合STL MAP的实现(洛谷P2814题解)

    不会并查集的话请将此文与我以前写的并查集一同食用. 原题来自洛谷 原题 文字稿在此: 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. ...

  5. 洛谷P2607题解

    想要深入学习树形DP,请点击我的博客. 本题的DP模型同 P1352 没有上司的舞会.本题的难点在于如何把基环树DP转化为普通的树上DP. 考虑断边和换根.先找到其中的一个环,在上面随意取两个点, 断 ...

  6. 【洛谷】题解 P1056 【排座椅】

    题目链接 因为题目说输入保证会交头接耳的同学前后相邻或者左右相邻,所以一对同学要分开有且只有一条唯一的通道才能把他们分开. 于是可以吧这条通道累加到一个数组里面.应为题目要求纵列的通道和横列的通道条数 ...

  7. 洛谷P3572题解

    这道题实在是一道 毒瘤 题,太坑爹了.那个写 \(deque\) 的题解亲测只有80分,原因 不言而明 ,这道题居然 丧心病狂 到 卡STL . 好了,不吐槽了,进入正题 题目分析: 这是一道十分 简 ...

  8. [洛谷P1972][题解][SDOI2009]HH的项链

    别碰我! 自己还是太蒟了…… 看了好久,最后抄参考题解打出来的…… 前面的可能影响后面的,所以按照询问右端点排序 这时候维护一个前缀和数组就可以了, 那么问题又来了,去重? 可以这样,从前往后枚举,如 ...

  9. 【洛谷P1119题解】灾后重建——(floyd)

    这道题告诉我,背的掉板子并不能解决一切问题,理解思想才是关键,比如不看题解,我确实想不清楚这题是弗洛伊德求最短路 (我不该自不量力的说我会弗洛伊德了我错了做人果然要谦虚) 灾后重建 题目背景 B地区在 ...

随机推荐

  1. Echarts X轴多项百分比的展示

    app.title = '堆叠柱状图'; option = { tooltip : { trigger: 'axis', axisPointer : { // 坐标轴指示器,坐标轴触发有效 type ...

  2. 为什么要用 redis 而不用 map 做缓存?

    缓存分为本地缓存和分布式缓存.以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例 ...

  3. Java自学-异常处理 Exception

    Java 异常 Exception 异常定义: 导致程序的正常流程被中断的事件,叫做异常 步骤 1 : 文件不存在异常 比如要打开d盘的LOL.exe文件,这个文件是有可能不存在的 Java中通过 n ...

  4. English--状语从句

    English|状语从句 现在开始讲述关于状语从句的内容,由于内容略难并且略多,我将换个简单的方式帮助理解,这一块有些东西是需要记忆的.虽然是记忆,但是我可以保证记忆的内容是知识. 前言 目前所有的文 ...

  5. requestAnimationFrame ---- 请求动画帧。

    window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画.该方法需要传入一个回调函数作为参数,该回调函数会 ...

  6. JDK8 stream用法

    forEach举例 public static void main(String[] args) { // TODO Auto-generated method stub List<Person ...

  7. python bs4 BeautifulSoup

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.bs4 模块的 BeautifulSoup 配合requests库可以写简单的爬虫. 安装 命令:pip in ...

  8. Pandas 之 DataFrame 常用操作

    import numpy as np import pandas as pd This section will walk you(引导你) through the fundamental(基本的) ...

  9. 解决网页刷新时,隐藏div元素闪现问题

    最近项目遇到一个问题,需要对一个div中的元素设置根据不同的情况进行显示和隐藏. 因为默认该div是显示的,所以在刷新页面的时候,会先加载这个div进行显示,加载完成后又执行到 hide() 方法,使 ...

  10. CentOS6.7搭建部署DHCP服务 (详解主配置文件)

    DHCP服务 dhcp:动态主机配置协议.从bootp演变而来,引进了租约.续租功能,成为了现在的DHCP. 需要就分配,不需要就回收. 工作过程: 1.当获得地址是,有租约期限,当你关机时,IP地址 ...