AtCoder Beginner Contest 057 - 初探atcoder

ZJOI讲课听说了atcoder这个OJ,感觉时间段很兹磁,都是晚上八点到九点四十。准备来一发,然后今晚是beginner,也许就是pj-难度吧。。

可是为啥没有写没有过会罚时???qwqqqq(好像是写了我没看见)

然后我大无畏的T4WA了4发(辣鸡出题人卡什么精度)

成功从半个小时AK选手变成了一个小时AK选手(这nm是pj-难度啊说出去我都觉得丢人)。

随手写题解吧。

第一题输出(a+b-1)%24+1 就ok
第二题O(nmlogm),枚举每个学生算出所有站点和他的距离然后排序即可
第三题O(sqrt(n)) ,枚举a*b=n并且max(a,b)最小,从sqrt(n)往下枚举即可。(日啊,我一开始往上枚举T了一发)
第四题O(n^2)的dp,dp[i][j]表示前i个取j个的最大值,然后f[i][j]表示取到dp[i][j]的方案数,然后就转移嘛。。注意最后枚举答案算平均数的时候不能除要换成乘法,不然会被辣鸡出题人卡精度。

只放T4代码吧,,总觉得写这篇东西就会被笑话(你都要省选了这种题你居然不能20min ak??你怎么这么弱啊??)

//QWsin
#include
#include
#include
#include
#include
using namespace std;
const int maxn=100+10;
typedef unsigned long long ll;
const double eps=1e-9;

ll f[maxn][maxn],a[maxn],dp[maxn][maxn];

int main()
{
    int n,l,r;cin>>n>>l>>r;

    for(int i=0;ifor(int j=0;j1e17;

    dp[0][0]=0;f[0][0]=1;
    for(int i=1;i<=n;++i) cin>>a[i];
    for(int i=1;i<=n;++i)
    {
        dp[i][0]=0;f[i][0]=1;
        for(int j=1;j<=i&&j<=r;++j)
        {
            ll t1=dp[i-1][j];
            ll t2=dp[i-1][j-1]+a[i];

            if(t1==t2) dp[i][j]=t1,f[i][j]=f[i-1][j]+f[i-1][j-1];
            else if(t1>t2) dp[i][j]=t1,f[i][j]=f[i-1][j];
            else dp[i][j]=t2,f[i][j]=f[i-1][j-1];
        }
    }

    int pos=0;ll cnt=0;
    for(int i=l;i<=r&&i<=n;++i)
        if(pos==0||dp[n][i]*pos > dp[n][pos]*i) pos=i,cnt=f[n][i];
        else if(dp[n][i]*pos==dp[n][pos]*i) cnt+=f[n][i];

    printf("%.6f\n%lld\n",(double)dp[n][pos]/pos,cnt);
    return 0;
}

你可能感兴趣的:(#,atcoder)