T1傻逼dp,5分钟暴力5分钟正解 100
//Copyright(c)2015 liuchenrui #include<cstdio> #include<ctime> #include<iostream> #include<algorithm> #include<cstring> #define mod 1000000007 using namespace std; /*void dfs(int now,int en1,int en2) { if(now==n+1){ans++;return;} if(en1>0 && en2>0)dfs(now+1,en1-1,en2-1);//对轰 if(en1>0)dfs(now+1,en1-1,en2);//A攻B充,A攻B守 if(en2>0)dfs(now+1,en1,en2-1);//A充B攻,A守B攻 dfs(now+1,en1,en2);//A守B守 dfs(now+1,en1+1,en2);//A守B充 dfs(now+1,en1,en2+1);//A充B守 dfs(now+1,en1+1,en2+1);//A充B充 }*/ /*4,21,119,707,4326,27019,171316,1098859,7112980,46384807,304339623,7135543,295383687, 403488757,754285412,781546420,431155151,549004720,504786,99010055,851998051,118357219, 907404568,421463128,481013902,990971965,359426098,944694362,557124046,811920322,51158385, 760952589,695588090,202034069,455032964,802581952,801227956,55157762,53596664,878742970, 212745736,191549936,826141573,453559719,300431424,646622255,924575777,180932529,124269743, 207633710,873953698,463145158,524548029,487809252,182711146,413384698,203915585,920524542, 74941027,841070248,370791619,330366001,7228766,884333992,543900149,609615248,346565084, 159438157,475589313,305736875,359640882,918292712,504159378,121368715,737015989,873660987, 275271778,750392454,893564948,600806499,434023623,157409047,498024775,381825768,3876250, 278094575,955171129,220227977,538084517,31250933,675203858,526556766,39394345,653533177, 976483897,598012872,320782543,700125624,513316923,586176633,722717985,807531232,410480753, 39913941,472222613,734717495,125437407,521446920,917271426,325204299,745852356,676001978, 775698118,946491016,327404074,619259018,133986881,120200144,389470548,19210355,91314725, 18668116,14493390,711082538,851701016,691232934,682048823,121578792,195852948,243837045, 260377059,295774078,516475090,945515446,472148296,640360542,153204766,843638210,37695297, 82265337,568326737,38789630,113026766,991100683,371032666,569618131,369850045,914789204, 872105106,276582341,834520524,379733898,86266332,945662102,886872943,400829227,752202756, 157886357,867972497,408180440,847208975,1232445,536236388,219001787,258127353,721905147, 563909198,499736080,216994507,297989260,759048951,991617068,236647554,127894862,470352916, 719234957,127757177,110794883,713337420,976005921,575272408,76215865,895296167,685567984, 126306710,64285743,939938889,636407275,94306467,380444000,292590154,794314305,920854396, 404281217,1723694,166874970,413862989,98580581,7582364,474809704,*/ int n; int dp[203][203][203]; int main() { freopen("bbj.in","r",stdin); freopen("bbj.out","w",stdout); cin>>n; dp[0][0][0]=1; for(int i=1;i<=n;i++) { for(int j=0;j<=n;j++) { for(int k=0;k<=n;k++) { dp[i][j][k]=(dp[i][j][k]+dp[i-1][j+1][k])%mod; dp[i][j][k]=(dp[i][j][k]+dp[i-1][j][k+1])%mod; dp[i][j][k]=(dp[i][j][k]+dp[i-1][j+1][k+1])%mod; dp[i][j][k]=(dp[i][j][k]+dp[i-1][j][k])%mod; if(k!=0)dp[i][j][k]=(dp[i][j][k]+dp[i-1][j][k-1])%mod; if(j!=0)dp[i][j][k]=(dp[i][j][k]+dp[i-1][j-1][k])%mod; if(k!=0 && j!=0)dp[i][j][k]=(dp[i][j][k]+dp[i-1][j-1][k-1])%mod; } } } int ret=0; for(int i=0;i<=n;i++) { for(int j=0;j<=n;j++) { ret=(ret+dp[n][i][j])%mod; } } printf("%d\n",ret); }T2 想了好久,,然后发现并没有什么方法
正解是物理折射定律= =怕不怕 0
//Copyright(c)2015 liuchenrui #include<cstdio> #include<ctime> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #define ld long double #define eps 1e-12 using namespace std; double X,Y; ld x,y; int n; ld a[100010],v[100010]; int main() { freopen("xxx.in","r",stdin); freopen("xxx.out","w",stdout); scanf("%d",&n); scanf("%lf%lf",&X,&Y);x=(ld)X,y=(ld)Y; if(x<0)x=-x; if(y<0)y=-y; for(int i=1;i<=n;i++) { scanf("%lf",&X); a[i]=(ld)X; } for(int i=1;i<=n;i++) { scanf("%lf",&X); v[i]=(ld)X; } ld l=0,r=1; while(fabs(l-r)>eps) { ld mid=(l+r)/2,sum=0; ld now=mid; for(int i=1;i<=n-1;i++) { ld p=a[i]/now; ld q=pow(p,2)-pow(a[i],2); if(q>0)sum+=sqrt(q); ld r=1-now; ld g=(r*a[i+1])/a[i]; now=1-g; } if(sum>x)l=mid; else r=mid; } ld now=l,sum=0; for(int i=1;i<=n-1;i++) { ld p=a[i]/now; sum+=p; ld r=1-now; ld g=(r*a[i+1])/a[i]; now=1-g; } printf("%0.10f",double(sum)); }T3
更加呵呵,想到n^4发现没有这一档果断不写了 30
附带标算
//Copyright(c)2015 liuchenrui #include<cstdio> #include<ctime> #include<iostream> #include<algorithm> #include<cstring> #define mod 1000000007 #define ll long long using namespace std; ll n; ll c[1001][1001]; ll rec[1001]; ll dp[1001]; ll ans[1001]; int main() { freopen("chessboard.in","r",stdin); freopen("chessboard.out","w",stdout); scanf("%I64d",&n); for(int i=0;i<=n;i++) for(int j=0;j<=i;j++) { c[i][j]= j ? (c[i-1][j-1]+c[i-1][j])%mod : 1; } rec[0]=1; dp[0]=1; ans[0]=1; for(int i=1;i<=n;i++)rec[i]=(rec[i-1]*i)%mod; for(int i=1;i<=n;i++) { for(int j=0;j<=i;j++) { dp[i]=(dp[i]+c[i][j]*c[i][j]%mod*rec[j]%mod)%mod; } } for(int i=1;i<=n;i++) { ans[i]=dp[i]*dp[i]%mod; for(int j=1;j<=i;j++) { ans[i]=(ans[i]+mod-c[i][j]*c[i][j]%mod*rec[j]%mod*ans[i-j]%mod)%mod; } } cout<<ans[n]; return 0; }