开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 20 天,点击查看活动详情
B. Cobbs
可以看出有这样的一个不等式
左边的式子可以化成n*(n-2k-1),然后可以发现当i<=(n-2k-1)时,即使j取到了n,a[i]|a[j]=0,还是要小于等于最小值的,所以可以直接从n-2*k开始遍历,而k最多100,所以这题直接暴力就可以了,,,
Codeforces Round #735 (Div. 2) B. Cobb(巧妙的暴力优化)_合金Bunny酱的博客-CSDN博客
int t,n,k,a[100005];
signed main()
{
//ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//freopen("in.txt","r",stdin);
cin>>t;
while(t--)
{
cin>>n>>k;
int ans=-1e18;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=max(n-2*k,1LL);i<=n;i++)
for(int j=i+1;j<=n;j++)
ans=max(ans,i*j-k*(a[i]|a[j]));
cout<<ans<<endl;
}
return 0;
}
//
Wish I Knew How to Sort 概率
假设0的个数是cnt0个,那么前cnt0的位置一定都要是0才可以,假设cnt1为前cnt0的位置是1的个数,那么一定得把这cnt1个1都换成0才可以,一共有cnt1*cnt1种换法,总的换法是C(n,2),所以总的期望就是p(cnt1)+p(cnt1-1)+...+p(1),也就是还剩cnt1个1的期望加上还剩cnt1-1个的期望一直加到还剩1个的期望
Codeforces Round #829 (Div. 2 + Div. 1) 2C/1A - 2E/1C - 知乎 (zhihu.com)
int t,n,a[200005],dp[200005];
signed main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//freopen("in.txt","r",stdin);
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int cnt0=count(a+1,a+n+1,0);
int cnt1=count(a+1,a+cnt0+1,1);
dp[0]=0;
int c2=(n*(n-1)%mod)*getinv(2)%mod;
for(int i=1;i<=cnt1;i++)
{
int p=(i*i%mod)*getinv(c2)%mod;
//dp[i]=dp[i-1]+getinv(p);
}
cout<<dp[cnt1]<<endl;
}
return 0;
}
//
G - Shinyruo and KFC
自己写的代码太多了,而且思路也有点复杂,原来只需要统计每个数出现多少次然后就是几次方就可以,a数组最多会出现根号(1e5)个数,所以直接暴力就可以,枚举m,每次都是所有的C(i,a[i])相乘,然后发现有很多a[i]是相同的,然后看看出现了多少次就是多少次方就可以了
【2021CCPC 威海】A、D、G、J_我wa的一声就哭出来了的博客-CSDN博客
int Lcm(int a,int b){return a*b/__gcd(a,b);}
int n,m,a[50005],fac[100005],ifac[100005],tx[100005];
set<int>s;
void init()
{
fac[0]=1;
for(int i=1;i<=100000;i++) fac[i]=fac[i-1]*i%mod;
ifac[100000]=getinv(fac[100000]);
for(int i=99999;i>=0;i--) ifac[i]=ifac[i+1]*(i+1)%mod;
}
int C(int a,int b)
{
if(b>a) return 0;
return (fac[a]*ifac[a-b]%mod)*ifac[b]%mod;
}
signed main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//freopen("in.txt","r",stdin);
cin>>n>>m;
init();
for(int i=1;i<=n;i++)
{
cin>>a[i];
tx[a[i]]++;
s.insert(a[i]);
}
for(int i=1;i<=m;i++)
{
int ans=1;
for(auto x:s)
{
ans=(ans*qpow(C(i,x),tx[x]))%mod;
}
cout<<ans<<endl;
}
return 0;
}
//