【BZOJ2299】[HAOI2011]向量(数论)

题面

BZOJ

洛谷

题解

首先如果我们的向量的系数假装可以是负数,那么不难发现真正有用的向量只有\(4\)个,我们把它列出来。\((a,b)(a,-b)(b,a)(b,-a)\),我们假设这四个出现的次数分别为\(c1,c2,c3,c4\)。

那么我们就有方程。

\[\begin{cases}a(c1+c2)+b(c3+c4)&=x\\b(c1-c2)+a(c3-c4)&=y\end{cases}
\]

因为合法的情况一定保证了所有数都是整数,因此\(c1+c2\)和\(c1-c2\)要同奇偶,\(c3,c4\)同理。

首先先判断是否有整数解,那么拿\(d=gcd(a,b)\)直接检查\(d|x,d|y\)就行了。

有了整数解我们很容易写出通解,因为只需要考虑奇偶性,所以根本不需要求出一组合法解,只需要求出一种合法的奇偶性。剩下的只需要\(check\)一下最终能否做到配对的奇偶性即可。

那么讨论\(a,b\)的奇偶性和\(x,y\)的奇偶性。(都是除掉\(gcd\)之后的值)

当\(a,b\)都为奇数的时候,显然只有\(x,y\)同奇偶的时候才有解,否则无法做到对应系数奇偶性相等。

当\(a,b\)一奇一偶的时候,发现偶数对应的系数可以随意调整,因此一定有解。

当\(a,b\)都是偶数的时候,听说你把\(gcd\)除掉之后还能两个数都是偶数??

那就做完了。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. using namespace std;
  5. inline int read()
  6. {
  7. int x=0;bool t=false;char ch=getchar();
  8. while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
  9. if(ch=='-')t=true,ch=getchar();
  10. while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
  11. return t?-x:x;
  12. }
  13. int main()
  14. {
  15. int T=read();
  16. while(T--)
  17. {
  18. int a=read(),b=read(),x=read(),y=read();
  19. int d=__gcd(a,b);
  20. if(x%d||y%d){puts("N");continue;}
  21. a/=d;b/=d;x/=d;y/=d;
  22. bool fl=false;
  23. if((a&1)&&(b&1)&&((x&1)==(y&1)))fl=true;
  24. if(((a&1)&&!(b&1))||(!(a&1)&&(b&1)))fl=true;
  25. puts(fl?"Y":"N");
  26. }
  27. return 0;
  28. }

【BZOJ2299】[HAOI2011]向量(数论)的更多相关文章

  1. BZOJ2299 HAOI2011向量(数论)

    设最后的组成为x=x0a+x1b,y=y0a+y1b.那么容易发现x0和y0奇偶性相同.x1和y1奇偶性相同.于是考虑奇偶两种情况,问题就变为是否存在x和y使ax+by=c,那么其充要条件是gcd(a ...

  2. BZOJ2299 [HAOI2011]向量 【裴蜀定理】

    题目链接 BZOJ2299 题解 题意就是给我们四个方向的向量\((a,b),(b,a),(-a,b),(b,-a)\),求能否凑出\((x,y)\) 显然我们就可以得到一对四元方程组,用裴蜀定理判断 ...

  3. BZOJ2299: [HAOI2011]向量

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2299 题解:乱搞就可以了... 不妨认为有用的只有(a,b)(a,-b)(b,a)(b,-a) ...

  4. 【BZOJ-2299】向量 裴蜀定理 + 最大公约数

    2299: [HAOI2011]向量 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1118  Solved: 488[Submit][Status] ...

  5. 【BZOJ 2299】 2299: [HAOI2011]向量 (乱搞)

    2299: [HAOI2011]向量 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1255  Solved: 575 Description 给你一 ...

  6. P2520 [HAOI2011]向量

    题目描述 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量 ...

  7. [HAOI2011]向量

    题目描述 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量 ...

  8. luogu P2520 [HAOI2011]向量

    传送门 一堆人说数论只会gcd,我连gcd都不会,菜死算了qwq Orzyyb 这题欺负我数学不好qwq 首先可以发现实际上有如下操作:x或y±2a,x或y±2b,x+a y+b,x+b y+a(后面 ...

  9. 【[HAOI2011]向量】

    靠瞎猜的数学题 首先我们先对这些向量进行一顿组合,会发现\((a,b)(a,-b)\)可以组合成\((2a,0)\),\((b,-a)(b,a)\)可以组合成\((2b,0)\),同理\((0,2a) ...

随机推荐

  1. SpringMVC之单/多文件上传

    1.准备jar包(图标所指必备包,其他按情况导入) 2.项目结构 3.SingleController.java(控制器代码单文件和多文件) package com.wt.uplaod; import ...

  2. Redis对象占用内存分析

    当你往Redis中插入了一系统对象,如何分析这些对象的占用情况? 1.我们可以在Redis的控制台使用info命令来查看各项指标,其中有一项是Memory,可以通过存储前后的used_memory差异 ...

  3. C#获取当前堆栈的各调用方法列表

    在使用.NET编写的代码在debug时很容易进行排查和定位问题,一旦项目上线并出现问题的话那么只能依靠系统日志来进行问题排查和定位,但当项目复杂时,即各种方法间相互调用将导致要获取具体的出错方法或调用 ...

  4. TomCat 再次发布我的程序

    打包成.war的步骤就不说了,之后的配置和上一次的不一样. 在Tomcat的conf下的server.xml文件中,重新配置如下 <Service name="xfwweb" ...

  5. 安卓开发helloworld

    https://blog.csdn.net/tangjie134/article/details/79495204

  6. db2安装

    官网下载: DB2 11.1 data server trial for Linux® on AMD64 and Intel® EM64T systems (x64)v11.1_linuxx64_se ...

  7. 《Linux内核分析》第六周学习小结

    进程的描述和进程的创建 一.进程的描述 进程描述符task_struct数据结构: (1)操作系统的三大功能: 进程管理.内存管理.文件系统 (2)进程的作用: 将信号.进程间通信.内存管理和文件系统 ...

  8. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

  9. 同步手绘板——json

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...

  10. navicat有数据额结构同步

    这个功能可能检查两个库的表结构异同,进行表结构构同步,可以生成同步语句. 比如在测试环境表中新增了字段,可以通过这个工具进行表结构同步.