2017 EC-FInal部分問題解————HPU ICPC国慶節訓練2


ディレクトリ、クリックして該当する問題解にジャンプします
  • [A. Chat Group](https://codeforces.com/gym/101775/problem/A)
  • [C. Traffic Light](https://codeforces.com/gym/101775/problem/C)
  • [L. SOS](https://codeforces.com/gym/101775/problem/L)

  • タイトルリンクCF上の
    A. Chat Group
    最初は思っていたのが間違っていて、ずっとC n k Cを出したいと思っていました.n^k CnkからC n n C_n^n Cnnの時計、それから彼らを加えて後で考えて、C n k C_からn^k CnkからC n k+1 C_n^{k+1}Cnk+1はC n k∗(n−k+1)/(k+1)C_n^k*(n-k+1)/(k+1)Cnk∗(n−k+1)/(k+1)なのでそのまま差し出しますがオーバーフローに注意
    #include
    using namespace std;
    typedef long long ll;
    const ll MOD = 1000000007;
    
    ll pow_mod(ll a, ll b, ll c){
            ll ans = 1;
            a %= MOD;
            while(b) {
                    if(b&1) ans = ans*a%c;
                    a = a*a%c;
                    b>>=1;
            }
            return ans;
    }
    
    int main() {
            int t,Case = 0;
            ll n,k;
            scanf("%d",&t);
            while(t--) {
                    scanf("%I64d %I64d",&n,&k);
                    ll ans = pow_mod(2,n,MOD)-1;
                    ll num = n;
                    for(int i=2;i<k;++i) {
                            ans = ((ans-num+MOD)%MOD+MOD)%MOD;
                            num = (num*(n-i+1)%MOD)*(pow_mod(i,MOD-2,MOD))%MOD;
                    }
                    ans = ((ans-num+MOD)%MOD+MOD)%MOD;
    
                    printf("Case #%d: %I64d
    "
    ,++Case, ans%MOD); } return 0; }

    C. Traffic Light
    赤信号の最大値を探すことです
    
    #include
    using namespace std;
    typedef long long ll;
    
    
    int main() {
            int t,Case = 0;
            int n;
            scanf("%d",&t);
            while(t--) {
                    scanf("%d",&n);
                    double ans = 0,x,a,b,tmp=0;
                    for(int i=0;i<=n;++i) {
                            scanf("%lf",&x);
                            ans += x;
                    }
                    for(int i=0;i<n;++i) {
                            scanf("%lf %lf",&a,&b);
                            if(b>tmp)       tmp = b;
                    }
                    printf("Case #%d: %.6f
    "
    ,++Case,tmp+ans); } return 0; }

    L. SOS
    チームメイトが30分ほどゲームをしてきた必勝態S_S
    #include
    using namespace std;
    
    int main() {
            int t,Case = 0;
            int n;
            scanf("%d",&t);
            while(t--) {
                    scanf("%d",&n);
                    printf("Case #%d: ",++Case);
                    if(n<=6)        puts("Draw");
                    else if(n%2)    puts("Panda");
                    else if(n>=16)  puts("Sheep");
                    else            puts("Draw");   
            }
            return 0;
    }