热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OpenjudgeC16H:MagicalBalls快速幂+逆元问题解析

本文主要解析了OpenjudgeC16H问题中涉及到的MagicalBalls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决OpenjudgeC16H问题中的MagicalBalls部分。

C16H:Magical Balls

总时间限制: 
1000ms
内存限制: 
262144kB
描述

Wenwen has a magical ball. When put on an infinite plane, it will keep duplicating itself forever.

Initially, Wenwen puts the ball on the location (x0, y0) of the plane. Then the ball starts to duplicate itself right away. For every unit of time, each existing ball on the plane will duplicate itself, and the new balls will be put on the adjacent locations. The duplication rule of these balls is, during the i-th unit of time, a ball, which locates at (x, y), will duplicate uballs to (x, y+1), dballs to (x, y-1), lballs to (x-1, y) and rballs to (x+1, y).

The duplication rule has a period of M. In another words, ui=ui-M, di=di-M, li=li-M, ri=ri-M, for i=M+1,M+2,...

Wenwen is very happy because she will get many balls. It is easy to calculate how many balls she will get after N units of time. However, she wants to know the sum of x-coordinates and y-coordinates of all balls after N units of time. This is a bit difficult for her. Could you help her? Since the sum might be very large, you should give the sum modulo 1,000,000,007 to her.

输入
The first line contains an integer T (1 ≤ T ≤ 25), indicating the number of test cases.

For each test case:

The first line contains four integers N (1 ≤ N ≤ 10^18), M (1 ≤ M ≤ 20,000), x0 and y0 (-10^18 ≤ x0,y0 ≤ 10^18);

Then follows M lines, the i-th line contains four integers: ui, di, li and ri (0 ≤ ui,di,li,ri ≤ 10,000).
输出
For each test case, output one integer on a single line, indicating the sum of x-coordinates and y-coordinates of all balls after N units of time, modulo 1,000,000,007.
样例输入

1
2 2 1 1
2 0 0 0
0 0 0 1

样例输出

19

提示
In the Sample Input:

Initially, there is 1 ball on (1,1).

After 1 unit of time, there is 1 ball on (1,1) and 2 balls on (1,2);

After 2 units of time, there is 1 ball on (1,1), 2 balls on (1,2), 1 ball on (2,1) and 2 balls on (2,2).
Therefore, after 2 units of time, the sum of x-coordinates and y-coordinates of all balls is
(1+1)*1+(1+2)*2+(2+1)*1+(2+2)*2=19.
题意:
给你一个球 初始位置在x0,y0
和一个周期函数
这个周期是m天  每天向上复制Ui个球 向下复制Di个球 向左复制Li个球,向右复制Ri个球
问你n天后 所有球的横纵坐标相加总和是多少
题解:
Si表示第i天答案的总和, sumi 表示第i天球的总和
S0为初始位置的答案即x+y
设定ai = ui+ri+li+di+1 , bi = ui+ri-li-di;
很容易得出
Si = S0 *  (∏ai)+ ∑j ((∏ai)* bj / a[j]) ; 
  分别用逆元快速幂求解

#include
#include

#include

#include

#include

#include

using namespace std;
const int N = 2e5+20, M = 1e2+10, MOD = 1e9+7, inf = 2e9;
typedef
long long ll;ll update(ll x) {return ((x % MOD)+MOD)%MOD;
}ll quick_pow(ll x,ll p) {
if(!p) return 1;ll ans = quick_pow(x,p>>1);ans = ans*ans%MOD;if(p & 1) ans = ans*x%MOD;return ans;
}ll inv(ll x,ll mo)
{
return quick_pow(x,mo-2);
}
int T;
ll n;
ll m;
ll U[N],D[N],R[N],L[N],A[N],B[N],Y[N];
int main()
{scanf(
"%d",&T);while(T--) {ll x,y;scanf("%lld%lld%lld%lld",&n,&m,&x,&y);ll S0 &#61; (x&#43;y )%MOD;ll allA &#61; 1;for(int i&#61;1;i<&#61;m;i&#43;&#43;) {scanf("%lld%lld%lld%lld",&U[i],&D[i],&L[i],&R[i]);A[i] &#61; (U[i] &#43; R[i] &#43; L[i] &#43; D[i] &#43; 1 ) % MOD;B[i] &#61; (U[i] &#43; R[i] - L[i] - D[i]) % MOD;allA &#61; allA * A[i] % MOD;}ll W &#61; 0;for(int i&#61;1;i<&#61;m;i&#43;&#43;) W &#61; (W &#43; B[i] * inv(A[i],MOD) ) % MOD;//cout<ll ans &#61; S0 * update(quick_pow(allA, n / m)) % MOD &#43; update(n/m) * W % MOD * quick_pow(allA, n/m)% MOD;ans %&#61; MOD;ll sum &#61; quick_pow(allA,n/m);//cout<for(int i&#61;1;i<&#61;n%m;i&#43;&#43;) {ans &#61; (ans * (A[i]) % MOD &#43; sum * B[i] % MOD) % MOD;sum &#61; sum * (A[i]) % MOD;}printf("%lld\n",(ans&#43;MOD )%MOD);}return 0;
}

 


转:https://www.cnblogs.com/zxhl/p/5682667.html



推荐阅读
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文探讨了如何在模运算下高效计算组合数C(n, m),并详细介绍了乘法逆元的应用。通过扩展欧几里得算法求解乘法逆元,从而实现除法取余的计算。 ... [详细]
  • This document outlines the recommended naming conventions for HTML attributes in Fast Components, focusing on readability and consistency with existing standards. ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 本文介绍如何通过更改软件源来提前体验Ubuntu 8.10,包括详细的配置步骤和相关注意事项。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
author-avatar
SIX2FOUR
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有