51nod oj 1256 1119 1013 1083 1014 1081<组合数+逆元+快速幂,DP,枚举,树状数组>

59 篇文章 0 订阅
27 篇文章 0 订阅

题目链接:1256


求逆元用拓展欧几里德--详情请看  点击打开链接


代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define LL long long 
LL extend_gcd(LL a,LL b,LL &x,LL &y)
{
	if (b==0)
	{
		x=1;y=0;
		return a;
	}
	else
	{
		LL t=extend_gcd(b,a%b,y,x);
		y-=x*(a/b);
		return t;
	}
}
int main()
{
	LL n,m,x,y;
	scanf("%lld%lld",&m,&n);
	extend_gcd(m,n,x,y);
	x=(x%n+n)%n;
	printf("%lld\n",x);
}

题目链接: 1119

题解与   LightOJ - 1067 数论<100000左右的组合数取模求法《逆元》>   一样


代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define LL long long
LL dis[2000100],ni[2000100];
LL mod=1000000007;
LL po(LL xx,LL k)
{
    LL lp=1,hu=xx;
    while (k)
    {
        if (k%2==1)
            lp=(lp*hu)%mod;
        hu=(hu*hu)%mod;
        k/=2;
    }
    return lp;
}
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    int da=n+m-2;
    int xi=n-1;
    dis[0]=ni[0]=1;
    for (int i=1;i<=da;i++)
    {
        dis[i]=dis[i-1]*i%mod;
    }
    ni[xi]=po(dis[xi],mod-2);
    ni[da-xi]=po(dis[da-xi],mod-2);
    LL ans=dis[da]*ni[xi]%mod*ni[da-xi]%mod;
    printf("%lld\n",ans);
    return 0;
}


题目链接:1013

快速幂+逆元

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define LL long long
LL mod=1000000007;
LL extend(LL a,LL b,LL &x,LL &y)
{
    if (b==0)
    {
        x=1;y=0;
        return a;
    }
    else
    {
        LL t=extend(b,a%b,y,x);
        y-=x*(a/b);
        return t;
    }
}
LL pp(LL x,LL k)
{
    LL lp=1,hu=x;
    while (k)
    {
        if (k%2)
        {
            lp=lp*hu%mod;
        }
        hu=(hu*hu)%mod;
        k/=2;
    }
    return lp;
}
int main()
{
    int n;scanf("%d",&n);
    LL p=pp(3,n+1);
    p-=1;
    LL x,y,a=2;
    extend(a,mod,x,y);
    x=(x%mod+mod)%mod;
    LL ans=p*x%mod;
    printf("%lld\n",ans);
    return 0;
}



题目链接:1083

简单dp

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define LL long long
LL map[600][600],dp[600][600];
int main()
{
    int n;scanf("%d",&n);
    memset(map,0,sizeof(map));
    memset(dp,0,sizeof(dp));
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
        scanf("%lld",&map[i][j]);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
        dp[i][j]=max(dp[i-1][j],dp[i][j-1])+map[i][j];
    printf("%lld\n",dp[n][n]);
    return 0;
}


题目链接:1014

枚举----无语--

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long i,a,p;
int main()
{
    scanf("%lld%lld",&p,&a);
    bool fafe=true;
    for (i=1;i<=p;i++)
    {
        if (i*i%p==a)
        {
            if (fafe)
            {
                printf("%lld",i);
                fafe=false;
            }
            else
                printf(" %lld",i);
        }
    }
    if (fafe)
        printf("No Solution\n");
    else
        printf("\n");
    return 0;
}



题目链接: 1081

题解:树状数组求和

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define low(x) x&-x
#define LL long long
int n;
LL shu[50050];
void ADD(int ii,LL xx)
{
	for (ii;ii<=n;ii+=low(ii))
	shu[ii]+=xx;
}
LL QUERY(int ii)
{
	LL lp=0;
	for (ii;ii>0;ii-=low(ii))
	lp+=shu[ii];
	return lp;
}
int main()
{
	scanf("%d",&n);
	LL a;memset(shu,0,sizeof(shu));
	for (int i=1;i<=n;i++)
	{
		scanf("%lld",&a);
		ADD(i,a);
	}
	int m;scanf("%d",&m);
	int b,c;
	while (m--)
	{
		scanf("%d%d",&b,&c);
		printf("%lld\n",QUERY(b+c-1)-QUERY(b-1));
	}
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<?xml version="1.0" encoding="UTF-8"?> <NetDataEvaluateSet> <Analysis netName="kqgs002_hq"> <Analysis value="548548.626,3319421.300,548548.700,3319421.300,548548.700,3319421.358,548548.626,3319421.358,548548.626,3319421.300" name="FlyPointAnalysis" isAnalysis="true"/> <Analysis value="true" name="IntersectLineAnalysis" isAnalysis="true"/> <Analysis value="3" name="IsolatedLineAnalysis" isAnalysis="true"/> <Analysis value="0.003" name="NearLineNodeAnalysis" isAnalysis="true"/> <Analysis value="false" name="NetConnectivityAnalysis" isAnalysis="true"/> <Analysis value="0.001" name="RepeatLineAnalysis" isAnalysis="true"/> <Analysis value="0.001" name="RepeatPointAnalysis" isAnalysis="true"/> <Analysis value="0.001" name="ShortLineAnalysis" isAnalysis="true"/> <Analysis name="AttributeAnalysis"> <Analysis dname="泵房" fldname="唯一编号" isAnalysis="true" highlight="泵房" expression="1" flag="true" type="1"/> </Analysis> <Analysis name="LinkDegreeAnalysis"> <Analysis dname="泵站" analysis_name="1" typevalue=""纵坐标" = '3319645.891'" cnns="2,3" isAnalysis="true"/> </Analysis> <Analysis name="LinkRuleAnalysis"> <Analysis dname="泵房" nod_fldname="所在位置" analysis_name="3" typevalue=""所属镇街" = 3 " equals="true" lin_fldname="管线口径" threshold="3" isAnalysis="true" ldname=""/> </Analysis> </Analysis> </NetDataEvaluateSet>清除 <Analysis value="548548.626,3319421.300,548548.700,3319421.300,548548.700,3319421.358,548548.626,3319421.358,548548.626,3319421.300" name="FlyPointAnalysis" isAnalysis="true"/> <Analysis value="true" name="IntersectLineAnalysis" isAnalysis="true"/> <Analysis value="3" name="IsolatedLineAnalysis" isAnalysis="true"/> <Analysis value="0.003" name="NearLineNodeAnalysis" isAnalysis="true"/> <Analysis value="false" name="NetConnectivityAnalysis" isAnalysis="true"/> <Analysis value="0.001" name="RepeatLineAnalysis" isAnalysis="true"/> <Analysis value="0.001" name="RepeatPointAnalysis" isAnalysis="true"/> <Analysis value="0.001" name="ShortLineAnalysis" isAnalysis="true"/> <Analysis name="AttributeAnalysis"> <Analysis dname="泵房" fldname="唯一编号" isAnalysis="true" highlight="泵房" expression="1" flag="true" type="1"/> </Analysis> <Analysis name="LinkDegreeAnalysis"> <Analysis dname="泵站" analysis_name="1" typevalue=""纵坐标" = '3319645.891'" cnns="2,3" isAnalysis="true"/> </Analysis> <Analysis name="LinkRuleAnalysis"> <Analysis dname="泵房" nod_fldname="所在位置" analysis_name="3" typevalue=""所属镇街" = 3 " equals="true" lin_fldname="管线口径" threshold="3" isAnalysis="true" ldname=""/> </Analysis>部分写代码
最新发布
06-12

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值