zoukankan      html  css  js  c++  java
  • 【ZJOI2011】看电影

    题面

    https://www.luogu.org/problem/P3330

    题解

    概率=合法方案除以总方案。

    首先总方案数是$k^n$(每个人可以抽到任意一个位置)

    先假设$k$可以到$1$,也就是形成了一个环,如果这样,是一定有解的。

    在$k$和$1$之间加一个座位$k+1$,如果$k+1$上坐了人,则是不合法的。

    对于每一个人,我们假设他从$k+1$个环元素中随机选,总共有$(k+1)^n$种方案,在剩下的$(k+1-n)$个座位中,我们可以指定任意一个为$k+1$,这样就是$(k+1)^n(k+1-n)$,因为是一个环,所以旋转一下是相同的方案,最后,合法方案为$(k+1)^n(k+1-n)/(k+1)=(k+1)^{n-1}(k+1-n)$。

    // luogu-judger-enable-o2
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define LL long long
    #define ri register int
    
    using namespace std;
    
    int T,n,k;
    int tona[250],tonb[250];
    int f[250],prime[250];
    
    void addA(int x) {
      while (1) {
        if (!f[x]) break;
        tona[f[x]]++;
        x/=f[x];
      }
      if (x!=1) tona[x]++;
    }
    void addB(int x) {
      while (1) {
        if (!f[x]) break;
        tonb[f[x]]++;
        x/=f[x];
      }
      if (x!=1) tonb[x]++;
    }
    
    int a[10005];
    void outA() {
      memset(a,0,sizeof(a));
      a[0]=1;
      for (ri i=1;i<=200;i++) while (tona[i]) {
        tona[i]--;
        for (ri j=0;j<=10000;j++) a[j]*=i;
        for (ri j=0;j<10000;j++) a[j+1]+=a[j]/10,a[j]%=10;
      }
      int f=0;
      for (ri i=10000;i>=0;i--) {
        if (a[i]) f=1;
        if (f) cout<<a[i];
      }
    }
    int b[10005];
    void outB() {
      memset(b,0,sizeof(b));
      b[0]=1;
      for (ri i=1;i<=200;i++) while (tonb[i]) {
        tonb[i]--;
        for (ri j=0;j<=10000;j++) b[j]*=i;
        for (ri j=0;j<10000;j++) b[j+1]+=b[j]/10,b[j]%=10;
      }
      int f=0;
      for (ri i=10000;i>=0;i--) {
        if (b[i]) f=1;
        if (f) cout<<b[i];
      }
    }
    
    int main(){
      scanf("%d",&T);
      int cnt=0;
      for (ri i=2;i<=200;i++) {
        if (!f[i]) prime[++cnt]=i;
        for (ri j=1;i*prime[j]<=200;j++) {
          f[i*prime[j]]=prime[j];
          if (i%prime[j]==0) break;
        }
      }
    
      while (T--) {
        scanf("%d %d",&n,&k);
        if (n>k) {
          puts("0 1");
          continue;
        }
        memset(tona,0,sizeof(tona));
        memset(tonb,0,sizeof(tonb));
        for (ri i=1;i<=n-1;i++) addA(k+1); addA(k+1-n);
        for (ri i=1;i<=n;i++) addB(k);
        for (ri i=1;i<=200;i++) {
          int t=min(tona[i],tonb[i]);
          tona[i]-=t;
          tonb[i]-=t;
        }
        outA(); putchar(' '); outB(); puts("");
      }
      return 0;
    }
  • 相关阅读:
    MongoDB集群与LBS应用系列(一)
    Docker下构建centos7容器无法使用systemctl命令的解决办法
    重新诠释的OSGi规范
    交互细节中那些变形金刚
    UX黑名单!有哪些常见的移动端UX设计误区需要规避?
    那些门户网站的兼容问题(持续更新)
    Vmware虚拟机网络模式及虚拟机与物理机通信方法
    交互设计阅读(一)
    笑傲江湖:完美解决205:您所选择的线路不存在问题
    笑傲江湖 外网
  • 原文地址:https://www.cnblogs.com/shxnb666/p/11478752.html
Copyright © 2011-2022 走看看