BNU 34975 剪纸 折线划分平面问题 大数模拟+规律
来源:互联网 发布:c语言源代码网站知乎 编辑:程序博客网 时间:2024/04/28 20:57
题目链接:点击打开链接
最多的情况就是每个直线和当前平面的所有直线都相交
设当前有x根直线
则加入一个type0的直线就能产生 x个交点,两个交点间的线段可以把一个平面划分成2个
就能增加x + 1个平面
再推广 若加入typeY 的直线
先让Y++,表示加入直线的根数
就能增加 (x + 1) * Y - (Y-1)
加完后 平面上的直线数就增加了Y :即 x+=Y
所以每次加入 X 根 Y类型的直线
则答案增加的情况就是:
Y++;
ans += (x +1) *Y - (Y-1)
ans += (x +1 + Y) * Y - (Y-1)
·
·
·
ans += (x+1 + (X-1)*Y) * Y - (Y-1)
然后化简一下就是
ans += x*Y +1
ans += (x+Y)*Y+1
·
·
·
ans+=(x+(X-1)*Y) *Y +1
发现ans一共加了 X 个1 然后第一部分是 Y * (等差数列)
再化简成
ans += X + Y*( ( x + x+(X-1)*Y ) * X / 2);
这样我们就能O(1) 算出 每增加一次 答案的增值
但是这里取模会出现问题
/2 的情况逆元可能不存在,
但能保证 ( x + x+(X-1)*Y ) * X 一定是偶数,所以用个大数直接进行运算。
import java.math.*;import java.util.*;import java.io.*;public class Main { static BigInteger x1 = new BigInteger("1"); static BigInteger x2 = new BigInteger("2"); public void work() { int T; T = cin.nextInt(); while (T-- > 0) { int n = cin.nextInt(); long mod = cin.nextLong(); long x = 0; long ans = 1 % mod; while(n-->0) { long X = cin.nextLong(), Y = cin.nextLong(); Y++; BigInteger now = BigInteger.valueOf(2*x + (X-1)*Y); now = now.multiply(BigInteger.valueOf(X)); now = now.divide(BigInteger.valueOf(2)); now = now.mod(BigInteger.valueOf(mod)); long tmp = now.longValue(); tmp *= Y; tmp%=mod; tmp += X; tmp%=mod; ans += tmp; ans %= mod; x += X*Y%mod; x %=mod; } ans = ans % mod; System.out.println(ans); } } Main() { cin = new Scanner(System.in); } public static void main(String[] args) { Main e = new Main(); e.work(); } public Scanner cin;}
0 0
- BNU 34975 剪纸 折线划分平面问题 大数模拟+规律
- 折线划分平面
- 折线分割平面 + 找规律
- 折线分割平面问题
- 折线与平面问题
- 折线分割平面(递归找规律)
- 直线划分平面问题
- 直线划分平面问题
- 平面划分问题
- 折线分割平面问题总结
- hdu 5047 大数+平面区域划分公式
- 平面划分问题、超平面规划
- HDOJ-2050(递推,找规律)(折线分割平面)
- HDU:2050 折线分割平面(规律,数学,推导)
- HDU 2050:折线分割平面(找规律,递推)
- hdu 2050折线分割平面(递推找规律)
- HDU--2050 折线分割平面问题
- 直线,折线,曲线分割平面以及平面分割空间问题
- MFC程序利用控制台输出调试信息
- 关于内联函数的几点总结以及构造析构是否可以是inline的
- POJ 1330 Nearest Common Ancestors LCA(在线RMQ,离线Tarjan)
- qt4嵌入式开发环境搭建过程(包括各种异常问题)(3)
- 深究“字节对齐”的原因
- BNU 34975 剪纸 折线划分平面问题 大数模拟+规律
- hdu 3336 Count the string(数据结构:KMP)
- 求每个员工操作的成功率
- unity 实现简单的触屏功能
- dwz框架---(2)表单回调函数
- 直角坐标系的旋转公式
- asp.net 视图状态简介
- linux系统/var/log目录下的信息详解
- System.IO命名空间