暑期多校
作者:互联网
2022.7.18 牛客
A
队友写的
D
高中数学(
考虑弦长最大的时候,弧长最大。
于是画画图就会发现其实那个弦长最大的时候是$O$和$Q$共线
然后连一下$O$和$A$跟$B$,数学推导一下弦长,再通过弦长反推圆心角大小就好了。
记得别写反$arcsin$和$arccos$
#include <bits/stdc++.h> using namespace std; int T; const double PI = 3.141592653589793; int main(){ cin>>T; while (T--){ double R,x,y,d; scanf("%lf%lf%lf%lf",&R,&x,&y,&d); if(fabs(d-R) <=0.00001){ printf("%.10lf\n",PI*R); continue; } double dis = sqrt(x*x+y*y); double t1=sqrt(R*R-(dis+d)*(dis+d)); double t2=sqrt(R*R-(dis-d)*(dis-d)); double Len=t2-t1; double Len1=sqrt(Len*Len+2.0*d*2.0*d); Len1=Len1/2.f; double Cos = Len1/R; double Angle = asin(Cos); double ans = 2.0 * Angle * R; printf("%.10lf\n",ans); } return 0; }
G
签到
显然填一堆$9$是最优的
然后记得判断原串是不是$9999999x$的形式就行了(
#include <bits/stdc++.h> using namespace std; string ss; int main(){ cin>>ss; int Len=ss.length(); if (Len == 1){ cout<<ss; return 0; } bool flag=false; for (int i=0;i<Len-1;i++){ if (ss[i]!='9') flag=true; } if (flag) for (int i=1;i<=Len-1;i++){ printf("9"); }else cout<<ss; return 0; }
I
血压暴涨题(
发现打牌轮数是固定的
直接$dp$就好了
然后记得打麻将的时候每一轮手上是$13$张牌
写错这个调了好久
$dp[i][j]$表示当前是第$i$轮,$j$个对子
每次可以多拿一个对子,或者不变
但是因为是最优策略,所以多拿一个对子的话,那张单牌一定还有$3$张在牌山里。
然后没了(
#include <bits/stdc++.h> using namespace std; long long dp[170][10]; int T; long long pai=136; int Pai[5][15]; long long Ans[55]; string ss; long long fish = 1e9+7; long long Pow(int x,int y){ long long ans=1; for (;y;y>>=1,x=1ll*x*1ll*x%fish) if (y&1) ans=1ll*ans*1ll*x%fish; return ans; } void Get(int x){ memset(dp,0,sizeof(dp)); pai = 136; pai = pai - 13; dp[0][x] = 1; for (int i=0 ; i<=pai ; i++) for (long long j=0;j<=6;j++){ long long res = (13ll-2ll*j)*3ll; long long dan = pai-i; long long nw = 1ll*dp[i][j]*Pow(dan,fish-2)%fish; if (dan-res >= 0){ (dp[i+1][j+1] += 1ll*nw*res%fish)%=fish; (dp[i+1][j] +=1ll*nw*(dan-res)%fish)%=fish; } } long long ans=0; for (int i=1;i<=pai-1;i++){ ans = (ans + 1ll * dp[i][7] * i%fish)%fish; } Ans[x]=ans; } int cnt=0; int main(){ scanf("%d",&T); for (int i=0;i<=7;i++){ Get(i); } while (T--){ cnt++; cin>>ss; memset(Pai,0,sizeof(Pai)); int Len=ss.length(); int x,hua,dui = 0; for (int i=0;i<Len;i++){ if ('1' <= ss[i] && ss[i] <= '9'){ x=ss[i]-'0'; i++; if (ss[i] == 'm') hua = 1; if (ss[i] == 'p') hua = 2; if (ss[i] == 's') hua = 3; if (ss[i] == 'z') hua = 4; Pai[hua][x]++; if (Pai[hua][x] == 2){ dui++; } } } printf("Case #%d: %lld\n",cnt,Ans[dui]); } return 0; }
标签:int,fish,多校,long,ss,1ll,暑期,dp 来源: https://www.cnblogs.com/si--nian/p/16491566.html