篩素數(shù)表文稿_第1頁
篩素數(shù)表文稿_第2頁
篩素數(shù)表文稿_第3頁
篩素數(shù)表文稿_第4頁
篩素數(shù)表文稿_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

篩素數(shù)篩素數(shù) 反素數(shù)序 反素數(shù) 素數(shù)判 快速冪取 輾轉(zhuǎn)相除法求 歐拉函 拓展歐幾里 Miller_rabin+ 高斯消 矩陣快速 組合數(shù)學八皇 組合數(shù)學錯 組合數(shù)學斐波那 組合數(shù)學卡特蘭 組合數(shù)學立方之 組合數(shù)學系列遞 組合數(shù)學系列容斥+逆 組合數(shù)學系列鴿巢原 組合數(shù)學系列置換 組合數(shù)學Polya定理與Burnside引 組合數(shù)學盒子裝小球問 費馬小定 異面直線公垂線的垂足坐標計算公式推 點到直線距 凸包散點求三角形最大面 dp問題 dp問題 dp問題01背 dp問題完全背 dp問題多重背 dp問題最大括號匹 dp問題區(qū)間最大字段和 dp問題樹形dp舉 dp問題狀壓dp舉 線段樹系列經(jīng)典問 字符串KMP算 回文子串O(n)manacher算 圖論最短 圖論最小生成 圖論最大 圖論匈牙利算法二分圖匹 經(jīng)典博弈納什博 java快速 2篩素數(shù)表constintmaxn2600;//大小自定義,非素數(shù)均為trueboolvis[maxn];篩素數(shù)表constintmaxn2600;//大小自定義,非素數(shù)均為trueboolvis[maxn];void{memset(vis,0,sizeof(vis))vis[0]=true;vis[1]=for(inti=2;i*i<maxn;i++)if(!vis[i])for(intj=i*i;j<maxn;j+=i)vis[j]=true;}反素問題描n,n+1,…,mn1m10,1,3,5,4,26,9,7,8,就是一個反素數(shù)序列。它也是按字典順序的第一個這樣的序列。我們可以擴展此定義,度d反素數(shù)序列是相鄰d個整數(shù)之和為合數(shù)的這種序列。所以,之前序列是一個度2反素數(shù)序列,但是不是度3的,因為子列5,4,2和為11。這些數(shù)按字典順31,3,5,46,2,10879輸入格輸入包含多組輸入集。每個輸入集包含同一行的三個整數(shù),nmd。n,md≤n<m≤1000和2≤d≤10。以一行000(此行不需處理)代表輸入的結(jié)束。3對于每個輸入集,輸出一行以逗號隔開的整數(shù)列,此整數(shù)列組成對于每個輸入集,輸出一行以逗號隔開的整數(shù)列,此整數(shù)列組成一個度反素數(shù)序列(不要入任何空格并且輸出不要跨越多行)如果不存在反素數(shù)序列,則輸出“Noanti-primesequenceexist輸入樣121315406000輸出樣Noanti-primesequenceexists.usingnamespacestd;constintMAXP=1100000;boolisPrime[MAXP];intinta[1005],ans[1005],n,m,d,OK;boolvst[1005];voidprimeList()memset(isPrime,true,sizeof(isPrime));isPrime[1]=false;for(inti=2;i<=MAXP;{ifprime[++prime[0i;/prime[0]0for(intj=1,k;(j<=prime[0])&&(k=i*prime[j])<={isPrime[k]=false;if(i%prime[j]==0)}}}++ji4boolcheck(intnum)boolcheck(intnum){intsum=ans[num],i,k;if(num-d+1>=1)k=num-d+k=for(i=num-1;i>=k;i--{sum+=ans[i];return1;}return}voiddfs(intpos)if(check(pos-1))if(pos==m-n+{OK=}for(inti=n;i<=m;{if(!vst[i]){ans[pos]=i;vst[i]=1;dfs(pos+vst[i]=0;if(OK)}}}個數(shù)intmain()intk;while(scanf("%d%d%d",&n,&m,&d))if(n==0&&m==0&&d==k=1;for(inti=n;i<=m;i++)a[k++]=i;memset(vst,0,memset(ans,0,OK=if(OK==0){printf("Noanti-primesequence5}for(inti=}for(inti=1;i<=m-n;i++)printf("%d,",ans[i]);printf("%d\n",ans[m-n+}return}反素對于任何正整數(shù)x,其約數(shù)的個數(shù)記做g(x)。例如g(1)=1,g(6)=4如果某個正整數(shù)x滿足:對于任意i(0ix),都有g(i)g(x),則稱x而反素數(shù)表就是對應上面反素數(shù)所建立的一張表,這張表好處多多,例如給你一個n的找出1~~n范圍內(nèi),誰的因子數(shù)之和最多!usingnamespace{inti,j;{{}}intmax=0;{{}}{6{}}return}以上為反素數(shù)表{}}return}以上為反素數(shù)表,下面為對應的因子個數(shù),如1-2中,2的因子個數(shù)最多,有21-4中,4為3個;1-664個。1-1164個。1-19中,126個。反素數(shù)的搜任給一個數(shù)n,可以得到1~n中,最大的SampleInputSampleOutputCase#1:840int64int64voiddfs(int64cur,int64cnt,int64power,int64{int64i;{}int64p=prime[sub];{7}}int{intt,T;{printf("Case#%d:}return}素}}int{intt,T;{printf("Case#%d:}return}素數(shù)判定intisprime(long//傳入待判定數(shù)intisprime(long{return0;longlongj=3;while(j<=(long{}return}快速longlongmodular(longlonglonglongmodular(longlonglonglong{longlongd=1,t=a;{}return}8publicstaticintgcd(intpublicstaticintgcd(inta,intbreturnb==0?a:gcd(b,a%}//計算a,b的最大公約數(shù),返回1,LCM最小intLCM(intm,int{intm1=m;intn1=n;inttemp;while(n1%m1!={temp=n1%m1;n1=m1;m1=}intans=n/m1*m;returnans;}//計算m,n的最小公倍數(shù)歐拉函數(shù)定義:φφ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-其中p1,p2……pn為x的所有質(zhì)因數(shù),x是不為0的整數(shù)。φ(1)=1(唯一和1互質(zhì)的數(shù)就是1本身)求出m的歐拉函數(shù)值phi[m],可知區(qū)間[1,mphi[m]個數(shù)與m1)。單項歐拉函數(shù):publicstaticintn){intres=for(inti=2;i<Math.sqrt(n);{if(n%i==0)res=res/i*(i-1);while(n%i==0)n=n/}}if(n>res=res/n*(n-1);returnres;}各項歐拉函數(shù):intphinewint[1000005];/for(inti2;i1000000;iif(phi[i]==0){9for(intj=i;j<=1000000;j+={for(intj=i;j<=1000000;j+={if(phi[j]==0)phi[j]=j;phi[j]=phi[j]/i*(i-}}}拓展歐幾里,x=(x0*n/gcd(a,b))%b;if(x<0)通解可以表示為x=x0+b/d*ty=y0-a/dint64x,dextend_gcd(a,b,x,y);/int64extend_gcd(int64a,int64b,int64&x,int64&y)int64t,ret;if(b==0){x=y=return}ret=extend_gcd(b,a%b,x,===t-a/b*return}//返回值為a,b兩系數(shù)的最大公約數(shù),計算出一組解Miller_rabin判素數(shù)法,pollard_rho分解質(zhì)例舉三道模版題題意:判斷所有質(zhì)數(shù)i<=k,2^i-1是否是質(zhì)數(shù),不是的話就要將它分解質(zhì)因數(shù)輸出來。SampleInputSample23*89=2047=(2^11)-47*178481=8388607=(2^23)-233*1103*2089=536870911=(2^29)-usingnamespacelonglongfactor[100],fac_top=usingnamespacelonglongfactor[100],fac_top=-//計算兩個數(shù)的longlongran[1000000],ID;longlongRand(){returnrand();}longlonggcd(longlong{longlongc;{}return}longlongmuti_mod(longlong{longlongexp=a%n,res=0;{{res+=exp;if(res>n)res-=n;}exp<<=1;exp-=b,longlong}return}longlongmod_exp(longlong{longlongexp=a%m,longp,longlong{exp=muti_mod(exp,exp,m);}return}//miller-rabin法測試素數(shù),{exp=muti_mod(exp,exp,m);}return}//miller-rabin法測試素數(shù),time測試次boolmiller_rabin(longlongn,{if(n==2)returnlonglonga,u=n-1,x,y;intt=0;{}{axi=0;i<times;Rand()%(n-1)+mod_exp(a,u,for(intj=0;j<t;{y=muti_mod(x,x,if(y==1&&x!=1&&x!=returnfalse;x=}if(y!=1)return)}return}longlongpollard_rho(longlongn,int{longlongx,y,d,i=1,k=2;x=Rand()%(n-1)+1;y=x;{x=(muti_mod(x,x,n)+c)%n;d=gcd(y-x,n);if(1<d&&if(1<d&&d<n)returnd;if(y==if(i==k){y=x;k<<=}}}voidfindFactor(longlong{if(miller_rabin(n,6)){factor[++fac_top]=n;}longlongp=n;while(p>=n)p=pollard_rho(p,k--);}{for(inttt=0;tt<1000000;tt++)intk;{for(inti=11;i<=k;{longlongn=(1ll<<i)-1;{for(intj=0;j<fac_top;j++)printf("%lld*printf("%lld=%lld=(2^%d)printf("%lld=%lld=(2^%d)-}}}return}2.給出兩個數(shù)a,b的最大公約數(shù),最小公倍數(shù),輸出最小的3601215usingnamespacestd;longlong=-//計算兩個數(shù)的longlonggcd(longlong{returnb;longlongc;{}return}longlongmuti_mod(longlong{longlongexp=a%n,res=0;{{res+=exp;if(res>n)res-=n;}exp<<=1;exp-=long}return}longlongmod_exp(long}return}longlongmod_exp(longlonga,longlongp,long{longlongexp=a%m,res=1;{exp=muti_mod(exp,exp,m);}return}//miller-rabin法測試素數(shù),time測試boolmiller_rabin(longlongn,long{longlonga,u=n-1,x,y;intt=0;}for(int{a=rand()%(n-1)+1;x=mod_exp(a,u,n);for(intj=0;j<t;j++){y=muti_mod(x,x,if(y==1&&x!=1&&x!=n-1)returnfalse;//mustnotx=}if(y!=1)return}return}longlongpollard_rho(longlongn,int{//找出一個longlongx,y,d,i=1,k=2;x=rand()%(n-1)+1;y=x;{x=(muti_mod(x,x,n)+c)%n;d=gcd(y-x,n);if(1x=(muti_mod(x,x,n)+c)%n;d=gcd(y-x,n);if(1<d&&d<n)returnif(y==x)if(i==k){y=x;k<<=}return}}voidfindFactor(longlongn,int{//二分找出所有質(zhì)因子,存入factorif(miller_rabin(n,10)){factor[++fac_top]=n;}longlongp=n;while(p>=n)p=pollard_rho(p,k--);//k值變化,防止死循}longlonga[1000];longlongm,minx,ans;intcmp(constvoid*a,const*b){return*(longlong*)a-*(longvoiddfs(longlongs,longlongnum,longlong{{}}}voidlonglongi;{}{}longlongi;{}{}}int{longlongs,t,n;{{}fac_top=-1;if(ans>n/ans)ans=n/ans;}return}Sample25Sample#include<cstdio>#include<ctime>#include<cstring>#include<iostream>constintS=20;usingnamespacestd;typedeflonglongLL;#definemaxn10000#include<cstring>#include<iostream>constintS=20;usingnamespacestd;typedeflonglongLL;#definemaxn10000inttot;muti_mod(LLa,LLb,LL LLret=0;ifif(ret>=c)ret-if(a>=c)a-=c;}return}pow_mod(LLx,LLn,LLmod){//返回x^nmodc非遞歸(n==1)returnx%mod;intbit[64],k=0;while(n){}LLfor(k=k--){if(bit[k]==1)}return}boolcheck(LLa,LLn,LLx,LLt){//a為基,n-1=x*2^t,檢n是不是合for(inti=1;i<=t;i++){if(ret==1&&last!=1&&last!=n-1)return1;}if(ret!=1)return1;return0;}boolMiller_Rabin(LLLLx=n-while((x&1)==0)x>>=1,t++;boolflag=1;if(t>=1&&LLx=n-while((x&1)==0)x>>=1,t++;boolflag=1;if(t>=1&&(x&1)==1){for(intk=0;k<S;k++){if(check(a,n,x,t)){flag=1;break;}}}if(!flag||n==2)return}gcd(LLa,LLif(a==0)returnif(a<0)returngcd(-a,b);while(b){LLt=a%b;a=b;}returnPollard_rho(LLx,LLwhile(1){LLd=gcd(y-x0,x);ifd!=x){return}if(y==x0)returnx;if(i==k){}}}voidfindfac(LLn){//遞歸進行質(zhì)因iffactor[tot++]=n;}LLwhile(p>=n)p=Pollard_rho(p,rand()}%(n-intintt;while(t--LLif(!Miller_Rabin(n))printf("Prime\n");tot=0;LLans=n;for(inti=0;i<tot;i++)ansLLif(!Miller_Rabin(n))printf("Prime\n");tot=0;LLans=n;for(inti=0;i<tot;i++)ans=min(ans,factor[i]);}}}數(shù),數(shù)到m的那個人又出列;//n=9,m=publicclassMain{publicstaticvoidmain(String[]{Scannerintf[]=newint[n+1];for(int}個退出的人的序號:注意程序只關注最后f[n],f[1~n-1]為中間程序無意義。}}//38657241//386572411importjava.util.Scanner;publicclassMainpublicstaticvoidmain(String[]{Scannerscan=newn=scan.nextInt();//n個人圍成環(huán),標號1~nm=scan.nextInt();//報到m號被殺死f[]=newint[n+1];i=2;i<=n;i++){}intans=(k-m+1+f[n])%Sample3405classMainstaticvoidmain(String[]args)Scannerscan=newScanner(System.in);while(scan.hasNext()){intk=scan.nextInt();if(k==0)elseelse1358657,2504881,System.out.println(a[k-}}}}importpublicclassMainpublicstaticmain(String[]{Scannerscan=newintresult[]=newint[14];intk=scan.nextInt();while(k!=0){for(intj=1;;{intm=j*(k+pp=rest=2*(inti=0;i<k;i++)(p+m-1)%rest;{if(p<k)}if(rest==}{p=rest=2*for(inti=0;i<k;i++)p=(p+m-1)%rest;if(p<k)}if(rest==k){}}}k=}}}}}}k=}}}結(jié)論m=5。題目意思大概n個小孩圍成一個圈,每個小孩手里有張卡片,記錄著一個數(shù)字。開始從第k個孩子,該孩子離開圈子,然后告訴別人他手里的數(shù)字,接下來便從位于該孩子數(shù)之和。例如第6個跳出的孩子能得到(1,2,3,6)四個糖果。usingnamespace#defineL(rt)(rt<<1)#defineR(rt)(rt<<1|1)constintusingnamespace#defineL(rt)(rt<<1)#defineR(rt)(rt<<1|1)constintintstructint date{intcharvoidbuild(intl,intr,intrt){tree[rt].l=l;returnintmid=(l+r)>>1;}update(intkey,intrt){tree[rt].sum--;returntree[rt].l;returnupdate(key-}voidfor(inti=1;i<=n;i++){}}}}}intinti,k,mod;intpos=0;if(boy[pos].val>0)//kk}printf("%s}return}usingnamespacestd;constintintx[MAXN];//intx[MAXN];//inlineintgcd(inta,int{intt;{}return}inlineintlcm(inta,int{}var+1,分別為0到Gauss(intequ,int{for(inti=0;i<=var;{}for(k=0;k<equ&&col<{枚舉當前處理的行for(i=k+1;i<equ;{}{for(j=k;j<var+1;j++)}{}for(i=k+1;i<equ;{枚舉要刪去的行.{LCM=lcm(abs(a[i][col]),abs(a[k][col]));ta=LCM/abs(a[i][col]);tb=for(j=col;j<var+1;{a[i][j]=a[i][j]*ta-}}}}for(i=k;i<equ;{if(a[i][col]!=0)return-}這樣的行,即說明沒有形成嚴格的上三角陣if(k<var){if(k<var){for(i=k-1;i>=0;i--){i行一定不會是(0,00)的情況,因為這樣的行是在第k行到第equ行.i行一定不會是(00aa0的情況,free_x_num0用于判斷該行中的不確定的變元的個數(shù),如果超過1個,則無法求解,它們?nèi)匀粸椴淮_定的變元.for(j=0;j<var;{free_index}(a[i][j]!=0&&free_x[j])free_x_num++,(free_x_num1continue;無法求解出確定的變元.變元,且該變元是確定的temp=for(j=0;j<var;{}free_x[free_index]=0;//該變元是確定的.}returnvarkvark個}Xn-1Xn-2for(i=var-1;i>=0;i--{temp=for(j=i+1;j<var;{if(a[i][j]!=0)temp-=a[i][j]*}if(tempa[i][i0return2說明有浮點數(shù)解,但無整數(shù)解.x[i]=temp/a[i][i];}return}int{inti,j;while(scanf("%d%d",&equ,&var)int{inti,j;while(scanf("%d%d",&equ,&var)!={memset(a,0,sizeof(a));for(i=0;i<equ;i++){for(j=0;j<var+1;{scanf("%d",}}intfree_num=if(free_num1printf("無解elseif(free_num>0){printf("無窮多解自由變元個數(shù)為%d\n"free_num);for(i=0;i<var;i++){i+if(free_x[iprintf("x%d是不確定的\n",elseprintf("x%d:%d\n",i+1,x[i]);}}{for(i=0;i<var;{printf("x%d:%d\n",i+}}}return}矩陣快速冪#includetypedef{int64int64powermod(int64x,int64int64int64powermod(int64x,int64n,int64p)//{int64res=1;{x=(x*x)%p;}return}Matrixmulti(Matrixx,Matrixy,int64p)//{inti,j,k;int64sum;for(i=0;i<2;i++)for(j={sum=for(k=0;k<2;k++)res.matrix[i][j]=sum%p;}return}MatrixMat_powermod(Matrixx,int64n,int64p)//x,n次冪,p{inti,j;for(j=0;j<2;j++){}{x=multi(x,x,p);}returnx=multi(x,x,p);}return}int{int64int64int64power,result;Matrixres;{keep1=(powermod(a,(p-1)/2,p)+1)%p;{res.matrix[0][0]=res.matrix[0][1]=res.matrix[1][0]=res.matrix[1][1]=power=(res.matrix[0][0]+res.matrix[0][1])%(p-}res.matrix[0][1]=(2*a*b)%p;res.matrix[1][0]=2%p;res.matrix[1][1]=(a+b)%p;result=1;result=(result*keep1)%p;}return} 當n>=k1122112323311223.1235813f(1)=1f(2)=1;f(n)=f(n-1)+f(n-2)atalan例如n=5時,有5種剖分方法。publicclassMain{publicstaticvoidmain(String[]Scannerscan={longf[]=new===for(inti=4;i===for(inti=4;i<=10000;i++){j++for(intj=2;j<=i-1;){f[i]+=f[j]*f[i-j+}}while{intn=}}1234511125SampleinputOutputforsampleinput310=1^3+1^3+…..+1^3;10=1^3+1^3+2^3importpublicclassuva11137intmaxn=dp[]=newvoid{dp[0]=for(inti=1;intt=ii<=21;i++)i*for(intj=t;j<maxn;j++)dp[j]+=dp[j-}}}publicstaticvoidmain(String[]args)Scannerscan=newScanner(System.in);while(scan.hasNext()){intn=scan.nextInt();}}}組合Scannerscan=newScanner(System.in);while(scan.hasNext()){intn=scan.nextInt();}}}組合數(shù)學中系列問題B-ConnectedSampleSample112340ForeachtestcaseoutputtheansweronasingleTheinputcontainsseveraltestcases.Eachtestcasecontainsanintegern,denotingthenumberofvertices.Youmayassumethat1<=n<=50.Thelasttestcaseisfollowedbyonezero.AnundirectedgraphisasetVofverticesandasetofE∈{V*V}edges.Anundirectedgraphisconnectedifandonlyifforeverypair(u,v)ofvertices,uisreachablefromv.Youaretowriteaprogramthattriestocalculatethenumberofdifferentconnectedundirectedgraphwithnvertices.Forexample,thereare4differentconnectedundirectedgraphswith3方案數(shù)為2^(C(n-k-1,2)),所以這樣的方案數(shù)共有C(n-1,k)*F(k+1)*2^(C(n-k-1,2))種。這種思路的優(yōu)點在于簡單明了,但是缺點在于編程復雜,要算高精度的加、減、乘,2的冪也考慮拿1時點2的情況,設此時2所在連通塊k各點,這k個點以及剩下的n-k個分別處在一個連通塊中,其方案數(shù)為F(k)*F(n-k),點需在除去點2的點中k-1個點成連通塊,故方案數(shù)為C(n-2,k-1),而這總共個點與剩下除去點n-k-1個點必須2^k-1,故這樣的情才能連通,即這k個點與點1至少有1條邊連通,這樣的方案數(shù)F(k)*F(n-k)*C(n-2,k-1)*(2^k-1)種。擔,只需要高精度加和乘,2的冪只到50。我的程序就是靠思路二解決的。classMainpublicstaticvoidmain(String[]args)Scannerscan=new=newBigInteger[51];f[1]=BigInteger.valueOf(1);f[2]=for(inti=3;i<=50;i++){for(intj=1;j<i;j++){f[i]=f[i].add(f[j].multiply(f[i-j]).multiply(C(i-}}intn=scan.nextInt();while(n!=0){14n=}}publicstaticBigIntegerC(longx,longy)forn=}}publicstaticBigIntegerC(longx,longy)for(intc====1;p<=x;p++)a=if(p==b=if(p==x-y)c=a;}return}}A-TheBossonSampleForeachtestcase,outputanintegerindicatingthemoneythebosscansave.Becausetheanswerissolarge,pleasemoduletheanswerwith1,000,000,007.Case1:Case2:ThefirstlinecontainsanintegerTindicatingthenumberoftestcases.(1 1000)Eachtestcase,thereisonlyoneintegern,indicatingthenumberofemployeesinACM.(1 OnMars,thereisahugecompanycalledACM(AhugeCompanyonMars),andit'sownedbyayoungerboss.DuetonomoonsaroundMars,theemployeescanonlygetthesalariesper-year.arenemployeesinACM,andit'stimeforthemtogetsalariesfromtheirboss.Allemployeesarenumberedfrom1ton.Withtheunknownreasons,iftheemployee'sworknumberisk,hecangetk4Marsdollarsthisyear.SotheemployeesworkingfortheACMareveryrich.BecausethenumberofemployeesissolargethatthebossofACMmustdistributetoomuchmoney,hewantstofirethepeoplewhoseworknumberisco-primewithnnextyear.Nowthebosswantstoknowhowmuchhewillsaveafterthedismissal.Sample1~n中與n4次方之和,即Sample1~n中與n4次方之和,即S=a1^4+a2^4+……;a1,a2……且與n則1=1;;ab≡1(modmbam逆,記作amax≡1(modm)的解.做輾轉(zhuǎn)相除法求得整數(shù)b,k5b+7k=1,b57逆計算如下:7=5+2,5=2×2+1.245回代1=5-2×2=5-2×(7-53×5-2回代1=5-2×2=5-2×(7-53×5-2×7,5^做輾轉(zhuǎn)相除法求得整數(shù)b,k21b+73k=1,則b2173逆21=10*2+1回代1=21-21^-PROB:HDUusingnamespacestd;LL//30MODb){LLret=1;}return}LLans=n;returnans;}LLans=n;returnans;LLans=n;returnans;}intvoidPrime(){ for(inti=2;i<=10000;i++){}}void//30MOD}n){LLi=idx;i<fact.size();i++){tret=((ret-}}int}LLsum=((Sum(n)-}return}G-FindaSamplereturn}G-FindaSampleSampleN個數(shù),問其中是否存在M個數(shù)使其滿足M個數(shù)的和是N的倍數(shù),如果有多組解,隨意輸出一組即可。若不存在,輸出0。223512341Incaseyourprogramdecidesthatthetargetsetofnumberscannotbefounditshouldprinttotheoutputthesinglenumber0.Otherwiseitshouldprintthenumberofthechosennumbersinthefirstlinefollowedbythechosennumbersthemselves(onaseparatelineeach)inarbitraryorder.Iftherearemorethanonesetofnumberswithrequiredpropertiesyoushouldprinttotheoutputonlyone(preferablyyourfavorite)ofthem.ThefirstlineoftheinputcontainsthesinglenumberN.EachofnextNlinescontainsonenumberfromthegivenset.TheinputcontainsNnatural(i.e.positiveinteger)numbers(N<=10000).Eachofthatnumbersisnotgreaterthan15000.Thisnumbersarenotnecessarilydifferent(soitmayhappenthattwoormoreofthemwillbeequal).Yourtaskistochooseafewofgivennumbers(1<=few<=N)sothatthesumofchosennumbersismultipleforN(i.e.N*k=(sumofchosennumbers)forsomenaturalnumberk).如果余數(shù)出現(xiàn)0,自然就是n的倍數(shù)。也就是說,n個數(shù)中一定存如果余數(shù)出現(xiàn)0,自然就是n的倍數(shù)。也就是說,n個數(shù)中一定存在一些數(shù)的和是n的倍數(shù)。本題的思路是從第一個數(shù)開始一次求得前i(iN)項的和關于N的余數(shù)sum,并依次記sum0;則從第一項到第isum在前邊已經(jīng)出現(xiàn)過,假設在第j(j<i)項出現(xiàn)sumj+1項到第iclassMainlonga[]=newlong[16000];longsum[]=newlong[16000];staticvoidmain(String[]args)throws{}PrintWriterstaticvoidrun()throwsIOException=newStreamTokenizer(newBufferedReader(newInputStreamReader(System.in)));out=newPrintWriter(new}publicstaticlongnextLong()throwsreturn(int)in.nval;}{publicstaticvoidsolve()throwsIOExceptionlongn=booleanflag=sum[0]=for(inti=1;i<=n;i++)a[i]=}for(inti=1;i<=n;i++)sum[i]=(sum[i-1]+a[i])%n;if(sum[i]==0){for(intk=1;k<=i;}}elsefor(intj=1;j<i;{if(sum[i]==sum[j])out.println(i-for(intk=j+1;k<=i;flag=true;}}}if}}}TimeLimit:2000MSMemoryLimit:65536KB64bitIOFormat:%I64d&EveryyearthereisthesameproblematHalloween:Eachneighbourisonlywillingtogiveacertaintotalnumberofsweetsonthatday,nomatterhowmanychildrencallonhim,soitmayhappenthatachildwillgetnothingifitistoolate.Toavoidconflicts,thechildrenhavedecidedtheywillputallsweetstogetherandthendividethemevenlyamongthemselves.Fromlastyear'sexperienceofHalloweentheyknowhowmanysweetstheygetfromeachneighbour.Sincetheycaremoreaboutjusticethanaboutthenumberofsweetstheyget,theywanttoselectasubsetoftheneighbourstovisit,sothatinsharingeverychildreceivesthesamenumberofsweets.Theywillnotbesatisfiediftheyhaveanysweetsleftwhichcannotbedivided.Yourjobistohelpthechildrenandpresentasolution.TheinputcontainsseveraltestThefirstlineofeachtestcasecontainstwointegerscandn(1≤c≤n≤100000),thenumberofchildrenandthenumberofneighbours,respectively.Thenextlinecontainsnspaceseparatedintegersa1,...,an(1≤ai≤100000),whereairepresentsthenumberofsweetsthechildrengetiftheyvisitneighbouri.ThelasttestcaseisfollowedbytwoForeachtestcaseoutputonelinewiththeindicesoftheneighboursthechildrenshouldselect(here,indexicorrespondstoneighbouriwhogivesatotalnumberofaForeachtestcaseoutputonelinewiththeindicesoftheneighboursthechildrenshouldselect(here,indexicorrespondstoneighbouriwhogivesatotalnumberofaisweets).Ifthereisnosolutionwhereeachchildgetsatleastonesweetprint"nosweets"instead.Notethatifthereareseveralsolutionswhereeachchildgetsatleastonesweet,youmayprintanyofthem.Sample4512375367112513170Sample3523//“nosweets”。可以的話輸出任一個滿足條件的即可。即要求選擇的糖果數(shù)目之和能被c整出:1.sum[i02.sum[i]的值已經(jīng)在前面出現(xiàn)過的情況時,就可以知道有解,并sum[i]數(shù)值的后一個位置開始→sum[i]的位置,這個貌似可以解出#includeusingnamespaceintsum[100001];intuse[100001];intc,n;boolis;{inti,j,k;{{{}}{{}{for(k=use[sum[i]]+1;k<=i+1;k++)printf("%d%c",k,k==i+1?'\n':'');}}}return}D-CowSortingFarmerJohn'sN(1≤N≤10,000)cowsarelineduptobemilkedintheevening.Eachcowhasaunique"grumpiness"levelintherange1...100,000.SincegrumpycowsaremorelikelytodamageFJ'smilkingequipment,FJwouldliketoreorderthecowsinlinesotheyarelinedupinincreasingorderofgrumpiness.Duringthisprocess,theplacesofanytwocows(notnecessarilyadjacent)canbeinterchanged.Sincegrumpycowsarehardertomove,ittakesFJatotalofX+YunitsoftimetoexchangetwocowswhosegrumpinesslevelsareXandY.PleasehelpFJcalculatetheminimaltimerequiredtoreorderthecows.Line1:AsingleLine1:Asingleinteger:Lines2..N+1:Eachlinecontainsasingleinteger:linei+1describesthegrumpinessofcowi.Line1:Asinglelinewiththeminimaltimerequiredtoreorderthecowsinincreasingorderof231231:Initial213:Afterinterchangingcowswithgrumpiness3and1123:Afterinterchangingcowswithgrumpiness1and2大致題意:FarmerJohn有N頭牛(1N10000)N頭牛都很各應,各自有一個不同的脾氣L(1L100000),這N頭牛按脾氣指數(shù)是無序排列,指數(shù)越大的越容易破壞farmersum+(len2)*minsumminlen1)*smallestusingnamespacestd;constintmaxn=10000+10;inta[maxn],c[100010];intvis[maxn],constintinf=1<<30;intMIN,MAX,sum;intwork(){intk,t,i,j,ans=for(i=1;i<=n;{ans=0;j=i;k=0;{if(t>t=vis[j]=1;j=vis[j]=1;j=ans+=min((k-2)*t,t+(k+1)*MIN);sum+=ans;}}return}{inti,j;intans;sum=0;MIN=inf,MAX=memset(vis,0,memset(c,0,sizeof(c));for(i=1;i<=n;i++){scanf("%d",&a[i]);if(a[i]<MIN=if(a[i]>MAX=}for(j=1;j<=MAX;c[jc[jc[j1求應有的位置ans=work();printf("%d\n",ans);return0;}題解:黑書P247,無聊的排序”。(完全一樣5.Polya定理與Burnside引理6.組合數(shù)學N個小球放入Mnm個箱子里,有多少種不同的放法(不一定是球和箱子,也可能是其他的元素與其他的放置位置,例如NM不難看出一共8類情況--的公式是把n個球排成一排,(一種方法)n-1m-1個小棍,放到空是球減1里面挑M-1個箱子做組合就有n+m個球,C(n+m-1,m-1),多了M個元素而已11的N2S(n,k)=S(n-1,k-1)+k*S(n-1,k),含義是第NK個數(shù)等于他上一排的上一個位置數(shù)字加上一排的同樣位置數(shù)字的K倍同理S(4,2)=S(3,1)+2*S(3,2)=1+2*3=7, 個相同箱子,每個箱子至少一個,則看三角形的第7行,第4個數(shù)字多少。6,N不同球,M同箱,允許空的時候(5的基礎上允許空箱)。明顯是N個球 看三角形就知道第8行前3個數(shù)字的和1 127+球不同,盒不同,非空,公式M!*S(N,M)=3!*S(8,3)=6*966=5796TimeLimit:1000MSMemoryLimit:(K表示)5,1,11,5,1t(0t20)M和N,以空格分開。對輸入的每組數(shù)據(jù)M和N,用一行輸出相應的K。SampleInput17intcount=0;intvoidDFS(intk,ints,int intvoidDFS(intk,ints,int {if(s==n){return;}inti;for(i=k;i>=0;i--){if(t+i<=m{DFS(i,s+1,}{}}}int{inti;{{DFS}}return}所有的小于p的質(zhì)數(shù)就可以了。事實上,測試小于p的平方根的所有質(zhì)數(shù)就可以了。AMt1*ABXm-Xa,Y-Ya,Z-Za)=t1*(Xb-Xa,Yb-Ya,Zb-M(t1(Xb-Xa)+XaAMt1*ABXm-Xa,Y-Ya,Z-Za)=t1*(Xb-Xa,Yb-Ya,Zb-M(t1(Xb-Xa)+Xa,t1(Yb-Ya)+Ya,t1(Zb-Za)+ZaN(t2(Xd-Xc)+Xc,t2(Yd-Yc)+Yc,t2(Zd-Zc)+Zcdoubledis(P&a,P&b,P{if(b.x!={doublek(b.ya.y(b.xa.x);fabs((pp.ya.y)k*(pp.xa.x))sqrt(1k*k}returnfabs(pp.x-}#include<stdio.h>#include<stdlib.h>#include<math.h>inttop;doubletypedef#include<stdio.h>#include<stdlib.h>#include<math.h>inttop;doubletypedefstruct{intx;intTPointvoidswap(TPointpoint[],inti,int{TPointtmp;tmp=point[i];point[j]=tmp;}doublemulti(TPointp1,TPointp2,TPoint{return(p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-}{return(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-}intcmp(constvoid*a,constvoid{TPoint*c=(TPoint*)a;TPoint*d=(TPointdoublek=multi(*c,*d,point[0]);if(k<0)return1;elseif(k==0&&distance(*c,point[0])>=distance(*d,point[0]))return1;elsereturn-}{//Graham掃描求{//Graham掃描求inti,u=0;for(i=1;i<=n1;i++){if((point[i].y<(point[i].y==point[u].y&&point[i].x<point[u].x))u=i;}//p[1]p[n1]按按極角排序,可采用快速排序qsort(point+1,n-1,sizeof(point[0]),cmp);for(i=0;i<=2;i++)stack[i]=i;top=2;for(i=3;i<=n-while(multi(point[i],point[stack[top]],point[stack[top-1]])>=0){top--;if(top==0)}stack[top]=i;}}int{doubletriangleArea(inti,intj,intk);voidPloygonTriangle();inti,while(scanf("%d",&n)&&n!=1){for(i=0;i<scanf("%d%d",&point[i].x,&point[i].y);if(n<=2){}if(n==printf("%.2lf\n",triangleArea(0,1,2));}}return}void{double}return}void{doubletriangleArea(inti,intj,intk);inti,j,k;max=-1;for(i=0;i<=top-2;i++){k=-for(j=i+1;j<=top-1;j++){if(k<=j)k=j+1;area=triangleArea(stack[i],stack[j],stack[k]);if(area>max)max=area;while(k+1<=area1=triangleArea(stack[i],stack[j],stack[k+1]);if(area1<area)break;if(area1>max)max=area1;area=area1;}}}}doubletriangleArea(inti,intj,int{//已知三角形三個頂點的坐標,求三角形的面doublel=fabs(point[i].x*point[j].y+point[j].x*+point[k].x*point[i].y-point[j].x*-point[k].x*point[j].y-point[i].x*point[k].y)/2;returnl;}DpLISProblem據(jù)是不大于30000的正整數(shù),用空格分隔)Sample8389207155300299170158據(jù)是不大于30000的正整數(shù),用空格分隔)Sample8389207155300299170158SampleOutputimportpublicclassMainpublicstaticvoidmain(String[]{Scannerscan=newScanner(System.in);whilenum==newn=max[]=new(intia[i]=0;i<n;i++)=}(inti=for1;ij=n;i++)j<i;j++)a[i]&&if(a[j]+1>max[i]=max[j]+if(num<max[i])num=}}}}}importif(num<max[i])num=}}}}}importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]{inta[]=newint[n];for(inti=0;i<n;i++)a[i]=scan.nextInt();}publicstaticintLIS(inta[],intn){intnum[]=newint[n];inti,j;{{}}intmax=0;returnmax;}模版3(推薦nlogn)publicclassMainpublicstaticvoid{Scannerscan=n==newint[n+b[]=newint[n+1];(inti=n==newint[n+b[]=newint[n+1];(inti=1;i<=n;{a[i]=}k=b[1]=(inti=2;i<=n;i++)if(a[i]b[k])//>=為最長不降子序列b[++k]=a[i];elseintj=while(a[i]<=b[j])b[j+1]=}}}}DP20classMain{publicstaticvoidmain(String[]args){Scannerin=newStringstr1=in.next();Stringstr2=int[][]DP=newint[str1.length()+1][str2.length()+1];inti;DP[i][0]=0;DP[0][i]=0;j=1;j<=str2.length();j++){if(str1.charAt(i-1)==str2.charAt(j-1))}}}}j=1;j<=str2.length();j++){if(str1.charAt(i-1)==str2.charAt(j-1))}}}}412326467{{classinta,b;staticvoidmain(String[]args)throwsInputStreamReaderis=newInputStreamReader(System.in);BufferedReaderin=newBufferedReader(is);String[]ss=in.readLine().split("");p=newint[a+1];q=newint[a+1];for(inti=1;i<=a;i++){ss=in.readLine().split("");}d=newint[b+1];for(inti=1;i<=a;i++)for(intj=b;j>=p[i];j--)d[j]=Math.max(d[j-p[i]]+q[i],d[j]);}}E-完全背包裸題Memory64bitIOFormat:%I64d&}}E-完全背包裸題Memory64bitIOFormat:%I64d&大,越幸福),b表示湫湫吃這種食物會吸收的卡路里量。[Technical101n<=a,b<=m<=37953791510676SampleOutputusingnamespace6SampleOutputusingnamespace{intt;{inti,j,aim;intka[105],val[105];for(i=0;i<t;i++)for(i0;i<t;i++){for(j=ka[i];j<=aim;{dp[j]=max(dp[j],dp[j-}}}return}Sample101201000100000SampleCollection#1:Can'tbedivided.00000SampleCollection#1:Can'tbedivided.Collection#2:Canbeusingnamespacestd;voidbag01(intv,int{for(inti=aim;i>=v;i--)}voidbag11(intv,int{for(inti=v;i<=aim;i++)}voidbagmuti(intm,intv,int{{intk=1;{}}}{intcas=0;{inttol=1*n[1]+2*n[2]+3*n[3]+4*n[4]+5*n[5]+6*n[6];{printf("Collection#%d:\n",(++cas));{}}{intcas=0;{inttol=1*n[1]+2*n[2]+3*n[3]+4*n[4]+5*n[5]+6*n[6];{printf("Collection#%d:\n",(++cas));{printf("Can'tbe}{for(inti=1;i<=6;if(dp[aim]==aim)printf("Canbeelse}}}return}Sample)[)(Sample66406usingSample66406usingnamespacestd;chars[110];boolboolmatch(inta,int{if(s[a]=='('&&s[b]==')')returnif(s[a]=='['&&s[b]==']')returntrue;returnfalse;}void{inti,j,k;{{}{}}for{{}}}int{{{}}}int{{}return}大和所在的子區(qū)間(L,R。0~9#intmaxsum(inta[],intleft,int{intintintsum1=0;intlefts=0;intsum1=0;intlefts=0;}intsum2=0;intrights=0;if(rights>sum2)sum2=rights;}if(localsum<leftsum)localsum=leftsum;}return}int{intintn,temp,i,j,k,max;}return}intmain(){intintn,temp,i,j,k,max;{{inttemp=0;}}}return}HDU100356-154}}}return}HDU100356-154-706-11-6-Sample144Case71publicclassMain{publicstaticvoidargs)Scannerscan=newm=a[]=newint[100001];i,j,m,n;(j=1;j<=m;j++)intsum=0,maxsum,startn=scan.nextInt();=0,=0,k=for(i}maxsum0;i<n;i++)=for(i0;i<n;i++)sum+=if(sum>{maxsum=sum;end=i;start=}ifk}<=i0)+}if(j!={System.out.println("Case}ifk}<=i0)+}if(j!={System.out.println("Case"+j+""+":");.println(maxsum+""+(start+1)+""+(end+1));}elseSystem.out.println("Case"+j+""+":");.println(maxsum+""+(start+1)+""+(end+}}}}A-ParkAnintegerT(T≤20)willexistinthefirstlineofinput,indicatingthenumberoftestcases.EachtestcasebeginswithtwointegersNandM(1≤N,M≤105),whichrespectivelydenotesthenumberofnodesandqueries.ThefollowingThenodesMlines,eachwithanlabeledfrom1toN.Sample1431424Foreachquery,outputtheminimumwalkingdistance,oneperSampleOutput4SampleOutput4到(因為是一棵樹S-Tk,則我們只需要沿著路徑一直走就2*xxnum直徑的求法:兩遍BFS(orDFS)于是原問題可以在O(Euv如果u在最長路上,那么v一定是最長路的一端。可以用反證法:假設v不是最長路的一端,則存在另一點v’使得(u→v’len(u→v’)len(u→v)。但這與條件“v是距u最遠的點”矛盾。如果u不在最長路上,則u到其距最遠點v的路與最長路一定有一交點c,且(c→v)與最長路的后半段重合(why?),即v一定是最長路的一端一部分l1,一部分l2l2對稱,取l1l2都一樣)usingnamespaceconstintstructintconstintstructintvoidaddedge(intcu,int}voidDFS(intfor(inti=head[u];i!=-1;i=edge[i].nxt){intv=edge[i].to;}}}intt;intu,v;i=1;i<n;i++){scanf("%d%d",&u,&v);addedge(u,v);}intfor(inti=1;i<=n;i++)}for(inti=1;i<=n;i++)intfor(inti=1;i<=n;i++)int}}return}3Test4TestTest這算是八皇后問題的變種了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論