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<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
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;i<maxn;++i)
for(int j=0;j<maxn;++j)
dp[i][j]=(ll)-1e17;
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;
}