题意:给定n,整数序列a和b,整数C,求所有成立的x

n<=1e5,1<=a[i]<=1e3,-1e3<=b[i]<=1e3,1<=C<=1e9

思路:

大概就照每条直线的零点分段,维护一下系数和常数项

特判的地方挺多,精度也要注意,写起来像计算几何

感觉这种麻烦的东西应该有模板

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned int uint;
  5. typedef unsigned long long ull;
  6. typedef pair<int,int> PII;
  7. typedef pair<ll,ll> Pll;
  8. typedef vector<int> VI;
  9. typedef vector<PII> VII;
  10. #define N 1100000
  11. #define M 4100000
  12. #define fi first
  13. #define se second
  14. #define MP make_pair
  15. #define pi acos(-1)
  16. #define mem(a,b) memset(a,b,sizeof(a))
  17. #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
  18. #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
  19. #define lowbit(x) x&(-x)
  20. #define Rand (rand()*(1<<16)+rand())
  21. #define id(x) ((x)<=B?(x):m-n/(x)+1)
  22. #define ls p<<1
  23. #define rs p<<1|1
  24.  
  25. const ll MOD=,inv2=(MOD+)/;
  26. double eps=1e-;
  27. int INF=1e9;
  28.  
  29. struct arr
  30. {
  31. ll a,b;
  32. }c[N],ans[N];
  33.  
  34. bool cmp(arr a,arr b)
  35. {
  36. return a.b*b.a>b.b*a.a;
  37. }
  38.  
  39. ll read()
  40. {
  41. ll v=,f=;
  42. char c=getchar();
  43. while(c<||<c) {if(c=='-') f=-; c=getchar();}
  44. while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
  45. return v*f;
  46. }
  47.  
  48. ll gcd(ll x,ll y)
  49. {
  50. if(y==) return x;
  51. return gcd(y,x%y);
  52. }
  53.  
  54. int xiaoyu(ll x1,ll y1,ll x2,ll y2)
  55. {
  56. //printf("xiaoyu %I64d %I64d %I64d %I64d\n",x1,y1,x2,y2);
  57. int p=-;
  58. ll t=x1*y2-y1*x2;
  59. if(t==) return ;
  60. if(t<) p=-p;
  61. if(y1*y2<) p=-p;
  62. return (p==);
  63. }
  64.  
  65. int main()
  66. {
  67. //freopen("1.in","r",stdin);
  68. int cas=read();
  69. while(cas--)
  70. {
  71. int n;
  72. scanf("%d",&n);
  73. ll C=read();
  74. rep(i,,n)
  75. {
  76. c[i].a=read();
  77. c[i].b=read();
  78. }
  79. sort(c+,c+n+,cmp);
  80. //rep(i,1,n) printf("%I64d %I64d\n",c[i].a,c[i].b);
  81. int m=;
  82. ll sa=,sb=;
  83. rep(i,,n)
  84. {
  85. sa-=c[i].a;
  86. sb-=c[i].b;
  87. }
  88. //printf("sa=%I64d C-sb=%I64d\n",sa,C-sb);
  89. int flag=;
  90. if(sa==&&C-sb==) flag=;
  91. if(xiaoyu(C-sb,sa,-c[].b,c[].a))
  92. {
  93. if(sa==&&C-sb!=) continue;
  94. m++;
  95. ll t=gcd(abs(C-sb),abs(sa));
  96. //printf("t=%I64d\n",t);
  97. ans[m].a=(C-sb)/t;
  98. ans[m].b=sa/t;
  99. if(ans[m].b<)
  100. {
  101. ans[m].a=-ans[m].a;
  102. ans[m].b=-ans[m].b;
  103. }
  104. }
  105. c[n+].a=-1e15; c[n+].b=;
  106. rep(i,,n)
  107. {
  108. sa+=2ll*c[i].a;
  109. sb+=2ll*c[i].b;
  110. //printf("sa=%I64d C-sb=%I64d\n",sa,C-sb);
  111. if(sa==&&C-sb==)
  112. {
  113. flag=;
  114. break;
  115. }
  116. if(sa==&&C-sb!=) continue;
  117. if(xiaoyu(C-sb,sa,-c[i].b,c[i].a)==&&xiaoyu(C-sb,sa,-c[i+].b,c[i+].a))
  118. {
  119. if(m>=&&(C-sb)*ans[m].b==sa*ans[m].a) continue;
  120. m++;
  121. ll t=gcd(abs(C-sb),abs(sa));
  122. ans[m].a=(C-sb)/t;
  123. ans[m].b=sa/t;
  124. if(ans[m].b<)
  125. {
  126. ans[m].a=-ans[m].a;
  127. ans[m].b=-ans[m].b;
  128. }
  129. }
  130. }
  131. if(flag)
  132. {
  133. printf("-1\n");
  134. continue;
  135. }
  136. if(m==)
  137. {
  138. printf("0\n");
  139. continue;
  140. }
  141.  
  142. printf("%d ",m);
  143. rep(i,,m-) printf("%I64d/%I64d ",ans[i].a,ans[i].b);
  144. printf("%I64d/%I64d\n",ans[m].a,ans[m].b);
  145. }
  146.  
  147. return ;
  148. }

【HDOJ6627】equation(模拟)的更多相关文章

  1. 第七届河南省赛F.Turing equation(模拟)

    10399: F.Turing equation Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 151  Solved: 84 [Submit][St ...

  2. [NOIP10.6模拟赛]2.equation题解--DFS序+线段树

    题目链接: 咕 闲扯: 终于在集训中敲出正解(虽然与正解不完全相同),开心QAQ 首先比较巧,这题是\(Ebola\)出的一场模拟赛的一道题的树上强化版,当时还口胡出了那题的题解 然而考场上只得了86 ...

  3. 基于网格的波动方程模拟(Wave equation on mesh)附源码

    波动方程是偏微分方程 (PDE) 里的经典方程,它在物理学中有大量应用并经常用来解释空间中的能量传播.波动方程是一个依赖时间的方程,它解释了系统状态是如何随着时间的推移而发生变化.在下面模拟波动方程时 ...

  4. Fabricate equation(dfs + 模拟)

    Fabricate equation Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Other ...

  5. UVA 1661 Equation (后缀表达式,表达式树,模拟,实现)

    题意:给出一个后缀表达式f(x),最多出现一次x,解方程f(x) = 0. 读取的时候用一个栈保存之前的结点,可以得到一颗二叉树,标记出现'X'的路径,先把没有出现'X'的子树算完,由于读取建树的时候 ...

  6. zzuoj--10399--Turing equation(模拟)

    Turing equation Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 152  Solved: 85 [Submit][Status][Web ...

  7. [CSP-S模拟测试]:Equation(数学+树状数组)

    题目描述 有一棵$n$个点的以$1$为根的树,以及$n$个整数变量$x_i$.树上$i$的父亲是$f_i$,每条边$(i,f_i)$有一个权值$w_i$,表示一个方程$x_i+x_{f_i}=w_i$ ...

  8. csp-s模拟测试56Merchant, Equation,Rectangle题解

    题面:https://www.cnblogs.com/Juve/articles/11619002.html merchant: 二分答案,贪心选前m大的 但是用sort复杂度不优,会T掉 我们只是找 ...

  9. csp-s模拟测试56(10.2)Merchant「二分」·Equation「树状数组」

    又死了......T1 Merchant 因为每个集合都可以写成一次函数的形式,所以假设是单调升的函数,那么随着t越大就越佳 而单调减的函数,随着t的增大结果越小,所以不是单调的??? 但是我们的单调 ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第8节 Math类_18_数学工具类Math

    常用几个数学的方法 abs绝对值 ceil向上取整,它并不是四舍五入 floor向下取整 round四舍五入 PI 按住Ctrl+鼠标左键 进入Math这个类的源码里面 Ctrl+F12 然后输入PI ...

  2. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_1_线程状态概述

    Thread中有个嵌套类 它描述了线程的状态 线程状态的图 Object类中的Wait方法和notify方法

  3. jmeter之三种参数化

    前言:总结并记录几种jmeter比较有用的元件 1.接口文档 2.参数化 3.断言 1.接口文档 a.拿到接口文档 接口地址:http://localhost:8080/jpress/admin/lo ...

  4. oracle DBID,SID,DB_NAME,DB_DOMAIN,INSTANCE_NAME,DB_UNIQUE_NAME, SERVICE_NAMES 及监听参数的说明

    DBID,SID,DB_NAME,DB_DOMAIN,INSTANCE_NAME,DB_UNIQUE_NAME, SERVICE_NAMES 及监听参数的说明 DB 相关的: DBID, SIDPFI ...

  5. laravel使用artisan报错SQLSTATE[42S02]: Base table or view not found: 1146

    说明你在应用初始化阶段使用到了数据库层面的东西,然而当时数据库不存在这个表/字段,所以会报错 需要在初始化比如 config 目录配置中,使用了数据库,在使用前需要添加一层判断,如果不存在 你需要用到 ...

  6. Bootstrap 学习笔记 项目实战 首页内容介绍 下

    最终效果: HTML代码 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset ...

  7. 应用安全_WTS-WAF绕过

    Access 检测: ?id=+AND+= ?id=+AND+=2 绕过: sqlmap.py -u http://www.xx.com/project.asp?id=29 --tables --ta ...

  8. 详解微信小程序支付流程

    转发博主 https://blog.csdn.net/qq_38378384/article/details/80882980 花了几天把小程序的支付模块接口写了一下,可能有着公众号开发的一点经验,没 ...

  9. mysql忘记密码/修改密码

    关键词:忘记密码,修改密码,mysql忘记密码,mysql修改密码 转自:https://www.cnblogs.com/jdxn/p/6847089.html 方法1: 用SET PASSWORD命 ...

  10. 浏览器输入url按回车背后经历了哪些?

    在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事? 1.首先,在浏览器地址栏中输入url,先解析url,检测url地址是否合法2.浏览器先查看浏览器缓存 ...