hatuoj 1300 HEX----组合数+逆元+思维 山东省第八届省赛D题

本文介绍了一种在六边形网格上计算从起点到任意指定格子的不同路径数量的方法。利用排列组合原理,通过计算向左、向右及垂直移动的步数,采用递推公式并考虑模运算来高效解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题 1300. – HEX

1300: HEX

时间限制: 4 秒   内存限制: 128 MB
提交: 26   解决: 9
提交  状态 
题目描述


On a plain
of hexagonal grid, we define a step as one move from the current grid to the
lower/lower-left/lower-right grid. For example, we can move from (1,1) to
(2,1), (2,2) or (3,2).

In the following graph we give a demonstrate of how this coordinate system works.

Your task is to calculate how many possible ways can you get to grid(A,B) from gird(1,1), where A and B represent the grid is on the B-th position of the A-th line.





输入


For each test case, two integers A
(1<=A<=100000) and B (1<=B<=A) are given in a line, process till
the end of file, the number of test cases is around 1200.

输出
For
each case output one integer in a line, the number of ways to get to the
destination MOD 1000000007.
样例输入

1 1 
3 2
100000 100000
样例输出

1 
3
1
提示

来源

提交  状态 




题意 就是从 1,1开始每次向 ↙ ↓ ↘这几个方向移动,给一个坐标,问到那个点有多少种走法

这肯定是排列组合题目,先把到一个点向左向右走的步数算出来,向左就是 n-m 向右是 m-1 (大佬推出来的规律) ,设 C是竖着走的步数,则走到一个点需要 l+r+c步 ,先把向左向右走看成一个 C(l+r+c,c)(向左向右走的所有情况的个数)这就是 C(l+r+c,c) C(l+r,r)就是所有情况,然后枚举c就可以了
看的大佬的博客都是(l+r+c) ! / ( l! * r! c!) 就是 C(l+r+c,c) C(l+r,r)化简的结果,会减一半时间

注意 除法取余 逆元(需打表,要不会超时)

#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define ll long long
ll re[100009];
ll vi[100009];

ll poww(ll a,ll b)
{
    ll ans=1;
    while(b)
    {
        if(b&1) ans=(ans*a)%mod;
        b>>=1;
        a=(a*a)%mod;

    }
    return ans;
}
void intt()
{
    re[0]=1;
    vi[0]=1;

    for(int i=1;i<=100003;i++)
    {
        re[i]=(i*re[i-1])%mod;
        vi[i]=poww(re[i],mod-2)%mod;
        //cout<<vi[i]<<endl;
    }

}
ll  C(int a,int b)
{

    return  (re[a]*(vi[a-b]%mod*vi[b]%mod)%mod)%mod;
}
int main()
{
   // ios::sync_with_stdio(false);
    ll n,m;
    intt();
    while(cin>>n>>m)
    {   ll ans=0;
        //int i=m;
       int l=n-m,r=m-1;
       int c=0;
     //  int k=l+r-1;
       while(l>=0&&0<=r)
       {
           ans+=C(l+r+c,c)*C(l+r,r)%mod;
          // ans+=re[l+r+c]*(vi[l]%mod*vi[r]%mod*vi[c]%mod)%mod;
           ans%=mod;

           c++;
           l--;
           r--;
       }
        cout<<ans<<endl;
    }
    return 0;
}
内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值和相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源和负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压和电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性与电能质量,展望了STATCOM在未来的发展潜力。 适合群:电气工程专业学生、从事电力系统相关工作的技术员、希望深入了解无功补偿技术的研究员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习与研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值