其他分享
首页 > 其他分享> > 暑期多校

暑期多校

作者:互联网

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