NOIP模拟测试7「方程的解·visit」

 visit

由于一些不可预知的错误导致我一直WA 错误最后说

思路

方案一

假设终点在出发点右上方(这样假设只是为了方便)

假设向左走了a步,向右下了b布,那么相应的我们要向右走m+a,向上n+b步

总步数t 所以由多重集方案数可得

$ \frac{t !}{a !\times b! \times (n+a)! \times (m+b)!}$

这种方法要特殊处理

方案二

假设向上下一共走了i步

如果i超出了范围我们要往回走(i-n)/2步(自己在纸上画一下)

然后如果i-n除不开2那么这种情况是无解的

左右同理

得到式子

$ans=\sum\limits_{i=n 2|i-n}^{t-m} C_{t}^{i}\times C_{i}^{\frac{i-n}{2} }\times C_{t-i}^{\frac{t-i-m}{2}}$

 

因为模数不一定为质数,但是几个质数乘积,所以我们要用先求出来分别模这几个质数结果,然后CRT合并

 

我犯的错误

我一开始看了吴迪的式子($ \frac{t !}{a !\times b! \times (n+a)! \times (m+b)!}$),他的式子会发生另外一些不可预知的错误,模小数时他的式子会爆炸($n!$中$n$比模数大时会发生另外一些错误)

然后我一开始没发现这个错误,发现他的式子跟我的差不多就开始打了,然后我就挂了。

然后我又自己推了一个式子用线性求逆元发现还是一直WA

最后wwb调了很长时间还是WA 最后进行了一番大改终于A了。

我用老套路控制变量(用A的代码一段一段替换WA的代码)发现线性求逆元爆炸了。

这里线性求逆元并不是我写错了,或者推错了

        jie[0]=1;ni[0]=1; for(ll j=1;j<=t;j++) jie[j]=jie[j-1]*j%w[i]; ni[t]=meng(jie[t],w[i]-2,i); for(ll j=t-1;j>=1;j--) ni[j]=ni[j+1]*(j+1)%w[i];

观察这段代码,首先如果jie里的j比w大那么他的阶乘取完模之后都为0,(前面有不是0的阶乘)

而ni 从t开始算的话如果最后一位为0那么这样递推算出来所有的逆元都为0

然而ni<w的一部分不是0 所以就错了

警醒

代码

#include<bits/stdc++.h>
#define ll long long
#define A 2000000
#define py printf("f**k\n")
ll a[A],b[A],k,p,n,m,t,num=0;
ll w[A],q[A],v[A],jie[A],ni[A];
ll exgcd(ll a,ll b,ll &x,ll &y){if(b==0){x=1;y=0;return a;}ll gcd=exgcd(b,a%b,x,y);ll t=x;x=y;y=t-a/b*y;return gcd;
}
void getprime(ll x){for(ll i=2;i<=sqrt(x);i++){if(x%i==0){while(x%i==0){x=x/i;}w[++w[0]]=i;}}if(x!=1) w[++w[0]]=x;return ;
}
ll meng(ll x,ll k,ll cix){ll ans=1;for(;k;k>>=1,x=x*x%w[cix])if(k&1)ans=ans*x%w[cix];return ans;
}
ll china(){ll x,y,a=0,m,n=1;for(ll i=1;i<=w[0];i++)n*=w[i];for(ll i=1;i<=w[0];i++){m=n/w[i];exgcd(w[i],m,x,y);y%=w[i];a=(a+y*m*b[i])%n;}return (a+n)%n;
}
ll jic(ll n,ll m,ll cix){if(m>n) return 0;if(m==0) return 1;return jie[n]%w[cix]*meng(jie[m]*jie[n-m]%w[cix],w[cix]-2,cix)%w[cix];
}
ll lucas(ll n,ll m,ll cix){if(m>n)return 0;if(n==0)return 1;return jic(n%w[cix],m%w[cix],cix)*lucas(n/w[cix],m/w[cix],cix)%w[cix];
}
using namespace std;
int main()
{scanf("%lld%lld",&t,&p);scanf("%lld%lld",&n,&m);getprime(p);n=abs(n),m=abs(m);for(ll i=1;i<=w[0];i++){jie[0]=1;ni[0]=1;for(ll j=1;j<=t;j++)jie[j]=jie[j-1]*j%w[i];ni[t]=meng(jie[t],w[i]-2,i);for(ll j=t-1;j>=1;j--)ni[j]=ni[j+1]*(j+1)%w[i];for(ll j=n;j<=t-m;j++){if((j-n)%2) continue;if((t-j-m)%2) continue;ll t1=lucas(t,j,i),t2=lucas(j,(j-n)/2,i),t3=lucas(t-j,(t-j-m)/2,i);b[i]=(b[i]+t1*t2%w[i]*t3)%w[i];}}cout<<china()<<endl;    
}

 

方程的解

各种傻逼特判,判错一个就40

思路:

思路有两种

一,

首先求出来左右边界然后拿右边界减左边界,非常简单,按照解方程的方法求即可

代码(我没打出来一直40分,这里是nc的代码)

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
ll T,a,b,c,x,y;
ll exgcd(ll a,ll b,ll &x,ll &y)
{if(b==0){x=1;y=0;return a;}ll d=exgcd(b,a%b,x,y);ll tmp=x;x=y;y=tmp-a/b*y;return d;
}
int main()
{scanf("%lld",&T);while(T--){scanf("%lld%lld%lld",&a,&b,&c);ll d=exgcd(a,b,x,y);ll l=floor(1.0*c/b*(-x)),r=ceil(1.0*c/a*y);ll k=r-l-1;if(a==0&&b==0){if(c==0){puts("ZenMeZheMeDuo");continue;}else{puts("0");continue;}}if((c%d)){puts("0");continue;}if(1LL*a*b<0){puts("ZenMeZheMeDuo");continue;}if(a==0){if(1LL*b*c>0) puts("ZenMeZheMeDuo");else puts("0");continue;}if(b==0){if(1LL*a*c>0) puts("ZenMeZheMeDuo");else puts("0");continue;}if(k<0){puts("0");continue;}if(k>65535) puts("ZenMeZheMeDuo");else printf("%lld\n",k);}return 0;
}

 

二,

求出来ymax 再求出来ymin 再/a

非常简单的思路(虽然我觉得第一个更简单)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 100000
ll a,b,x,y,c,t;
ll exgcd(ll a,ll b,ll &x,ll &y)
{if(b==0){x=1;y=0;return a;}ll c=exgcd(b,a%b,x,y);ll z=x;x=y;y=z-y*(a/b);
//    printf("x=%lld y=%lld\n",x,y);return c; 
}
int main()
{
//    freopen("data.in","r",stdin);
//    freopen("data.out","w",stdout);scanf("%lld",&t);while(t--){scanf("%lld%lld%lld",&a,&b,&c);
//        printf("a=%lld b=%lld\n",a,b);x=0,y=0;if(a<0&&b<0) a=-a,b=-b,c=-c;        if(a==0){if((b<=0&&c>=0)||(b>=0&&c<=0)){printf("0\n");continue;}else if(c%b){printf("0\n");continue;}else{printf("ZenMeZheMeDuo\n");continue;};}if(b==0){if((a<=0&&c>=0)||(a>=0&&c<=0)){printf("0\n");continue;}else if(c%a){printf("0\n");continue;}else {printf("ZenMeZheMeDuo\n");continue;};}ll g=exgcd(a,b,x,y),ans=0;x*=c/g,y*=c/g;
//        printf("%lld %lld a=%lld b=%lld c=%lld\n",x,y,a,b,c);if(c%g){printf("0\n");continue;}if(a*b<0){printf("ZenMeZheMeDuo\n");continue;}a/=g,b/=g,c/=g;x%=b;while(x<=0) x+=b;y=(c-a*x)/b;ll y2=y%a;while(y2<=0) y2+=a;ans=(y-y2)/a+1;if(y2>y) ans=0;
//        printf("y=%lld y2=%lld x=%lld c=%lld\n",y,y2,x,c);if(ans<=65535)printf("%lld\n",ans);elseprintf("ZenMeZheMeDuo\n");}
}

 

题目思路还是挺简单的就是一些恶心的特判

特判

首先$c \mod gcd!=0$时无解

然后$a,b$异号时无穷多解

$a$为$0$,$b$为$0$,$c$为$0$时无穷多解

$a$为$0$ $b$为$0$ $c$不为$0$ 无解

$ymax<ymin$无解

$a==0$ $  b,c$异号无解

$a==0$ $  b,c$同号无穷多解

$b==0$ $  a,c$异号无解

$b==0$ $  a,c$同号无穷多解

 

转载于:https://www.cnblogs.com/znsbc-13/p/11227871.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jsf绑定bean_JSF –渴望的CDI bean

jsf绑定bean每个人都知道JSF 2中热切的托管bean。 ManagedBean具有eager属性。 如果eager true并且范围是application&#xff0c;那么必须在应用程序启动时而不是在第一次引用该bean时创建此bean。 当您想在应用程序启动期间加载应用程序范围的数据&#xff08;例如&#xff0…

红旗系统linux忘了开机密码,红旗Linux6.0中忘记了root密码

很久很久以前&#xff0c;用虚拟机安装了red flag6.0windows xp 的双系统&#xff0c;很久很久以后&#xff0c;打开虚拟机red flag系统忘记了密码&#xff1a;在网上搜了下解决办法&#xff0c;转了先&#xff0c;不知管不管用&#xff01;

在网页中的flash游戏,按方向键浏览器的滚动条会跟着滚动

今天总算把这个困扰我N久的问题给解决了&#xff0c;在我的flash游戏《牧场物语》中有方向键操作&#xff0c;但是在按上下方向键的时候浏览器右边的滚动条跟着滚动&#xff0c;也一上一下的&#xff0c;弄的我头晕&#xff0c;还让不让人活啊&#xff0c;今天终于得到答案了。…

谁最终需要Java模块?

拼图问题为1000。我作为X想要JPMS模块。 如果不是平台开发人员&#xff0c;X是什么&#xff1f; 我的回答是X是人&#xff08;减去平台开发人员&#xff0c;因为那是一个条件&#xff09; 。 我们都需要模块系统具有更安全的代码&#xff0c;从而产生更可靠的系统&#xff0c;…

linux 删除带a的文件格式,linux基础命令练习题

2、如何通过命令行重启linux操作系统&#xff1f;shutdown -r now |reboot |init 63、如何在命令行中快速删除光标前的内容&#xff1f;ctrl uctrl k (删除光标之后的内容)5、设置/test/a.txt属主有读写执行权限&#xff0c;属组&#xff0c;有读写&#xff0c;其他账户无权限…

linux安全软件 腾讯,腾讯安全团队发现一存在24年的Linux 0day高危漏洞

腾讯安全团队近日向Linux社区提交了两个Linux X.25套接字漏洞&#xff0c;该漏洞可能造成权限提升&#xff0c;攻击者利用漏洞可能控制整个系统。漏洞风险等级为高&#xff0c;漏洞影响内核版本为2.1.16&#xff5e;5.9.8的Linux系统。目前这些漏洞尚未修复&#xff0c;漏洞细节…

在Salesforce中调用外部系统所提供的的Web Service

这里需要提供外部service所对应的WSDL文件&#xff08;Salesforce只支持从本地上传&#xff09;&#xff0c;并且提供的WSDL文件有如下两点要求&#xff1a; 1&#xff09;&#xff1a;wsdl 文件只能有一个binding&#xff0c;Salesforce是不支持多个binding的 2&#xff09;&a…

linux查询日志中页面返回状态码,[linux shell] Shell脚本实现apache日志中的状态码分析...

这篇文章主要介绍了Shell脚本实现apache日志中的状态码分析,本文先是介绍了按天切割日志的方法,然后给出了分析访问状态码的脚本,需要的朋友可以参考下一、首先将apache日志按天切割复制代码 代码如下:vi /etc/httpd/conf/httpd.confErrorLog "|rotatelogs /var/log/httpd…

e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (四) Q 反回调...

上一篇文章“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step &#xff08;三&#xff09; SqlServer数据库的访问” 下面讲一下&#xff0c;对于在写Node.js自动化测试脚本过程中&#xff0c;的编写回调问题&#xff0…

基于比率的路由到旧版和现代应用程序–通过Spring Cloud的Netflix Zuul

从应用程序的旧版本迁移到应用程序的现代化版本时&#xff0c;一个非常普遍的要求是能够将用户缓慢迁移到新应用程序。 在本文中&#xff0c;我将介绍通过Spring Cloud使用对Netflix Zuul的支持编写的这种路由层。 在继续之前&#xff0c;我必须承认&#xff0c;此处演示的大多…

linux查找设备所在分片,Linux设备驱动统一模型解析

soc节点指定了&#xff1c;0x0 0xe0000000 0x00100000&#xff1e;&#xff1b;此属性值指定对于1024KB范围的地址空间&#xff0c;在物理0x0处寻址的子节点映射到物理0xe0000000的父地址。通过这种映射&#xff0c;串行设备节点可以通过0xe0004600地址的加载或存储、0x4600(在…

一个兼容所有浏览器的阻止事件冒泡方法

function stopBubble(event) { //阻止冒泡事件 //取消事件冒泡 var e arguments.callee.caller.arguments[0] || event; //若省略此句&#xff0c;下面的e改为event&#xff0c;IE运行可以&#xff0c;但是其他浏览器就不兼容 if (e && e.stopPropagation) { // this …

linux shell 脚本 supress,《linux Shell 脚本攻略》进阶学习(第一部分)

第二章命令之乐cat 不仅可以读取文件并且连接数据&#xff0c;它还能从标准输入中进行读取要从标准输入中读取&#xff0c;就要使用管道操作符echo Text through stdin | cat - file.txt。这里的-被作为来之stdin 文本的文件名称实例 在file.txt 中写入dfagfmirgjriogjrogijdfg…

xaml_XAML或JavaFx?

xaml这是使用XAML和JavaFx构建应用程序的快速&#xff0c;主观&#xff0c; 无权且非常不科学的比较。 比较是基于我与每个人合作的个人经验。 在XAML方面&#xff0c;这意味着WPF和Win8存储应用程序 。 在JavaFx方面&#xff0c;这意味着Windows 7应用程序。 JavaFX JavaFx被…

古代猪文

题意&#xff1a; 给定q &#xff0c;n 求$q^{\sum\limits {d|n} C_{n}^{d} }mod 999911659$ 题解&#xff1a; 首先如果你直接算次方上的数的话会炸掉&#xff0c;因为欧拉定理我们可以得到 $q^{\sum\limits {d|n} C_{n}^{d} mod999911658}mod 999911659$ 因为mod的数是个合数…

linux gcc 7.3.0安装,升级gcc到7.3.0

#查看当前版本gcc --version # 先查看当前版本确认是否需要升级tar -zxvf gcc-7.3.0.tar.gzcd gcc-7.3.0#检测和安装相关依赖包&#xff0c;这个过程需要耐心等待&#xff0c;此步骤会将依赖包下载到gcc-7.3.0目录&#xff0c;如果因网络原因无法完成请自行使用wget下载。该步骤…

使用Envoy代理的微服务模式,第二部分:超时和重试

该博客是系列文章的一部分&#xff0c;该系列文章更深入地介绍了Envoy Proxy和Istio.io &#xff0c;以及它如何实现更优雅的连接和管理微服务的方式。 跟随我christianposta &#xff0c;紧跟这些博客文章的发布。 什么是Envoy代理 &#xff0c;它如何工作&#xff1f; 如何…

矩阵快速幂总结

依然主要还是自用 首先矩阵一条性质的概述和证明 概述:对于一个临接矩阵$G$来说&#xff0c;它自乘$G^k$次方中$G[i][j]$含义为从i走到j走k步方案数. 证明:比较麻烦,我们设f[i]表示从1走到其他点方案数,那么根据矩阵递推优化,k次就是转移了k次,那么每次走一步,k次就是走了k步 最…

c语言有一个正整数加上100,c语言编程实现:一个整数,它加上100后是完全平方数,再加168又是完全平方数,求该数。...

满意答案问题&#xff1a;一整数&#xff0c;它加100后是完全平方数&#xff0c;再加168还是完全平方数&#xff0c;求该整数解题思路&#xff1a;设该数为x&#xff0c;它加100后是A&#xff0c;再加168为B。则因为A是完全平方数&#xff0c;所以A为正数&#xff0c;且Ay*y&am…

C语言计算分段函数pta,PTA浙大版《C语言程序设计(第3版)》题目集 练习2-11 计算分段函数[2] (10分)...

1.编程将一个字符串中所有空格替换为“%20”#define _CRT_SECURE_NO_WARNINGS#include #includeusing namespace std;const int maxd 20;//最大深度int m[1 << maxd];//最大结点个数为2的maxd次方-1//编程将字符串中的空格用%20代替…2021/5/21 3:32:25pssh是由python编写…