日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/2 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的NOIP模拟测试7「方程的解·visit」的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产五月婷婷 | 国产永久免费视频 | 开心激情五月网 | 熟妇五十路六十路息与子 | 久久成人在线观看 | 日日干av| 国产精品国色综合久久 | 性色一区 | 色一区二区 | 麻豆av电影网 | 伊人网综合视频 | 黑人与日本少妇 | 精品乱子伦一区二区三区 | 91精品国产综合久久福利软件 | 黄色骚视频 | jav中文字幕 | 欧美三级 欧美一级 | 午夜婷婷| 麻豆电影网站 | 特级一级黄色片 | 青青草精品视频 | 11一12免费毛片 | 国产激情av一区二区三区 | 久草国产在线视频 | 国产精品视频h | 天天干天| 日本丰满少妇一区二区三区 | 亚洲人xxx| 99热偷拍| 999精品视频 | 色四虎| 精品成人免费一区二区在线播放 | 天天天天天天干 | 天天躁夜夜躁狠狠躁 | 秘密基地免费观看完整版中文 | 成人黄色小视频 | 日韩在线观看免费网站 | 欧美日韩免费观看视频 | 在线观看视频毛片 | 超级砰砰砰97免费观看最新一期 | 成人国产视频在线观看 | 欧美日韩美女 | 久久精品免费看 | 日韩午夜片 | 中文字幕视频一区 | 日韩激情一区二区三区 | 精品国产aⅴ麻豆 | 夜av| 精品字幕 | 成人在线观看18 | 少妇中文字幕 | 色天使在线视频 | 精品熟妇视频一区二区三区 | 久色免费视频 | 欧美粗大猛烈 | 好男人资源 | 狂野欧美性猛交免费视频 | 国产suv精品一区二区883 | av女星全部名单 | 靠逼视频免费网站 | 国产精品一区二区三区在线免费观看 | 中文字幕福利 | 欧美精品一区二区在线观看 | 欧美一级乱黄 | 欧美成人福利 | 亚洲国产精品无码专区 | 91久久国产视频 | 性xxx法国hd极品 | 欧美特级黄| 天天躁日日躁狠狠躁喷水 | 精品一区在线观看视频 | 国产福利观看 | 亚洲三级视频在线观看 | 老熟妇一区二区三区啪啪 | 成人久久网 | 久草资源在线播放 | 女人喷潮完整视频 | 国产高清在线免费 | 3d动漫精品啪啪一区二区下载 | 久久久久一级片 | 99国产精品一区二区 | 奇米影视第4色 | 欧美日韩亚洲高清 | 特级黄毛片 | 男人天堂视频网站 | 强行无套内谢大学生初次 | 天天撸天天射 | 黄色变态网站 | 日韩美女福利视频 | 欧美亚洲精品一区 | 毛片www| 中文字幕一区二区三区又粗 | 自拍偷拍亚洲一区 | 亚洲中文字幕一区二区 | 亚洲免费观看视频 | 9999热视频 | 在线小视频你懂的 | 免费在线观看成人av | 日韩18p|