dz网站自己做的模板放在哪里,汽车网站怎么做,淮北公司做网站,wordpress菜单没有了visit 由于一些不可预知的错误导致我一直WA 错误最后说 思路 方案一 假设终点在出发点右上方#xff08;这样假设只是为了方便#xff09; 假设向左走了a步#xff0c;向右下了b布#xff0c;那么相应的我们要向右走ma#xff0c;向上nb步 总步数t 所以由多重集方案数可得… visit 由于一些不可预知的错误导致我一直WA 错误最后说 思路 方案一 假设终点在出发点右上方这样假设只是为了方便 假设向左走了a步向右下了b布那么相应的我们要向右走ma向上nb步 总步数t 所以由多重集方案数可得 $ \frac{t !}{a !\times b! \times (na)! \times (mb)!}$ 这种方法要特殊处理 方案二 假设向上下一共走了i步 如果i超出了范围我们要往回走(i-n)/2步自己在纸上画一下 然后如果i-n除不开2那么这种情况是无解的 左右同理 得到式子 $ans\sum\limits_{in 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 (na)! \times (mb)!}$他的式子会发生另外一些不可预知的错误模小数时他的式子会爆炸$n!$中$n$比模数大时会发生另外一些错误 然后我一开始没发现这个错误发现他的式子跟我的差不多就开始打了然后我就挂了。 然后我又自己推了一个式子用线性求逆元发现还是一直WA 最后wwb调了很长时间还是WA 最后进行了一番大改终于A了。 我用老套路控制变量用A的代码一段一段替换WA的代码发现线性求逆元爆炸了。 这里线性求逆元并不是我写错了或者推错了 jie[0]1;ni[0]1; for(ll j1;jt;j) jie[j]jie[j-1]*j%w[i]; ni[t]meng(jie[t],w[i]-2,i); for(ll jt-1;j1;j--) ni[j]ni[j1]*(j1)%w[i]; 观察这段代码首先如果jie里的j比w大那么他的阶乘取完模之后都为0前面有不是0的阶乘 而ni 从t开始算的话如果最后一位为0那么这样递推算出来所有的逆元都为0 然而niw的一部分不是0 所以就错了 警醒 代码 #includebits/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,num0;
ll w[A],q[A],v[A],jie[A],ni[A];
ll exgcd(ll a,ll b,ll x,ll y){if(b0){x1;y0;return a;}ll gcdexgcd(b,a%b,x,y);ll tx;xy;yt-a/b*y;return gcd;
}
void getprime(ll x){for(ll i2;isqrt(x);i){if(x%i0){while(x%i0){xx/i;}w[w[0]]i;}}if(x!1) w[w[0]]x;return ;
}
ll meng(ll x,ll k,ll cix){ll ans1;for(;k;k1,xx*x%w[cix])if(k1)ansans*x%w[cix];return ans;
}
ll china(){ll x,y,a0,m,n1;for(ll i1;iw[0];i)n*w[i];for(ll i1;iw[0];i){mn/w[i];exgcd(w[i],m,x,y);y%w[i];a(ay*m*b[i])%n;}return (an)%n;
}
ll jic(ll n,ll m,ll cix){if(mn) return 0;if(m0) 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(mn)return 0;if(n0)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);nabs(n),mabs(m);for(ll i1;iw[0];i){jie[0]1;ni[0]1;for(ll j1;jt;j)jie[j]jie[j-1]*j%w[i];ni[t]meng(jie[t],w[i]-2,i);for(ll jt-1;j1;j--)ni[j]ni[j1]*(j1)%w[i];for(ll jn;jt-m;j){if((j-n)%2) continue;if((t-j-m)%2) continue;ll t1lucas(t,j,i),t2lucas(j,(j-n)/2,i),t3lucas(t-j,(t-j-m)/2,i);b[i](b[i]t1*t2%w[i]*t3)%w[i];}}coutchina()endl;
} 方程的解 各种傻逼特判判错一个就40 思路 思路有两种 一 首先求出来左右边界然后拿右边界减左边界非常简单按照解方程的方法求即可 代码我没打出来一直40分这里是nc的代码 #includeiostream
#includecstdio
#includecmath
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(b0){x1;y0;return a;}ll dexgcd(b,a%b,x,y);ll tmpx;xy;ytmp-a/b*y;return d;
}
int main()
{scanf(%lld,T);while(T--){scanf(%lld%lld%lld,a,b,c);ll dexgcd(a,b,x,y);ll lfloor(1.0*c/b*(-x)),rceil(1.0*c/a*y);ll kr-l-1;if(a0b0){if(c0){puts(ZenMeZheMeDuo);continue;}else{puts(0);continue;}}if((c%d)){puts(0);continue;}if(1LL*a*b0){puts(ZenMeZheMeDuo);continue;}if(a0){if(1LL*b*c0) puts(ZenMeZheMeDuo);else puts(0);continue;}if(b0){if(1LL*a*c0) puts(ZenMeZheMeDuo);else puts(0);continue;}if(k0){puts(0);continue;}if(k65535) puts(ZenMeZheMeDuo);else printf(%lld\n,k);}return 0;
} 二 求出来ymax 再求出来ymin 再/a 非常简单的思路虽然我觉得第一个更简单 #includebits/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(b0){x1;y0;return a;}ll cexgcd(b,a%b,x,y);ll zx;xy;yz-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);x0,y0;if(a0b0) a-a,b-b,c-c; if(a0){if((b0c0)||(b0c0)){printf(0\n);continue;}else if(c%b){printf(0\n);continue;}else{printf(ZenMeZheMeDuo\n);continue;};}if(b0){if((a0c0)||(a0c0)){printf(0\n);continue;}else if(c%a){printf(0\n);continue;}else {printf(ZenMeZheMeDuo\n);continue;};}ll gexgcd(a,b,x,y),ans0;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*b0){printf(ZenMeZheMeDuo\n);continue;}a/g,b/g,c/g;x%b;while(x0) xb;y(c-a*x)/b;ll y2y%a;while(y20) y2a;ans(y-y2)/a1;if(y2y) ans0;
// printf(y%lld y2%lld x%lld c%lld\n,y,y2,x,c);if(ans65535)printf(%lld\n,ans);elseprintf(ZenMeZheMeDuo\n);}
} 题目思路还是挺简单的就是一些恶心的特判 特判 首先$c \mod gcd0$时无解 然后$ab$异号时无穷多解 $a$为$0$$b$为$0$$c$为$0$时无穷多解 $a$为$0$ $b$为$0$ $c$不为$0$ 无解 $ymaxymin$无解 $a0$ $ b,c$异号无解 $a0$ $ b,c$同号无穷多解 $b0$ $ a,c$异号无解 $b0$ $ a,c$同号无穷多解 转载于:https://www.cnblogs.com/znsbc-13/p/11227871.html