Kids and Prizes - SGU 495 - Virtual Judge (vjudge.net) 概率
对于每个奖品没被拿到的概率是((n-1)/n)^m
奖品没被拿到的期望就是n*((n-1)/n)^m
则奖品被拿到的期望就是n-n*((n-1)/n)^m
然后输出这个公式就可以了,,,
D - Maximum AND 位运算
如果在这一位上a和b正好可以凑出n对1和0来,那么这一位就可以被选上,但是没有想好如何去选,,其实只要看看a[i]和~b[i](~按位取反)是否都相同就可以,看代码就很明白了
Educational Codeforces Round 134 (Rated for Div. 2) A - D - 知乎 (zhihu.com)
ll t,n,a[100005],b[100005],c[100005],d[100005];
bool check(ll x){
for(int i=1;i<=n;i++) c[i]=d[i]=0;
for(int i=1;i<=n;i++) c[i]=a[i]&x,d[i]=~b[i]&x;
sort(c+1,c+n+1);
sort(d+1,d+n+1);
for(int i=1;i<=n;i++)
if(c[i]!=d[i]) return 0;
return 1;
}
int main(){
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<=n;i++) scanf("%lld",&b[i]);
ll ans=0;
for(int i=30;i>=0;i--){
if(check(ans|(1<<i))) ans|=(1<<i);
}
printf("%lld\n",ans);
}
return 0;
}
G - Two Merged Sequences
对于a[i],如果只能放在上升序列就放在上升序列,如果只能放在下降序列就放在下降序列,如果都可以放那就看看a[i]和a[i+1]的关系,如果a[i]>a[i+1]那么a[i]放在下降序列,a[i]<a[i+1]就放在上升序列,如果相等就一个放在上升一个放在下降,因为a[i]>a[i+1]放在下降序列或者是上升序列的情况都是把a[i]放在a[i+1]前面,其实也就相当于把这个数给去掉,所以还是比较合理的
Codeforces 1144G Two Merged Sequences - Dup4 - 博客园 (cnblogs.com)
ll n,a[200005];
int main(){
scanf("%lld",&n);
ll dec=-1,inc=-1,flag=1;
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<=n;i++){
bool fg1=0,fg2=0;
if(dec>a[i]||dec==-1) fg1=1;
if(inc<a[i]||inc==-1) fg2=1;
if(!fg1&&!fg2){
flag=0;break;
}
if(fg1&&!fg2){
dec=a[i];a[i]=1;
}
else if(!fg1&&fg2){
inc=a[i];a[i]=0;
}
else{
if(a[i]>a[i+1]) dec=a[i],a[i]=1;
else if(a[i]<a[i+1]) inc=a[i],a[i]=0;
else{
dec=a[i],a[i]=1;
inc=a[i+1],a[i+1]=0;
i++;
}
}
}
if(!flag) printf("NO\n");
else{
printf("YES\n");
for(int i=1;i<=n;i++) printf("%lld ",a[i]);
}
return 0;
}