• 2017 UESTC Training for Math


    2017 UESTC Training for Math

    A    sg博弈水题

    #include<bits/stdc++.h>
    using namespace std;
    #pragma comment(linker, "/STACK:102400000,102400000")
    #define rep(i,a,b) for (int i=a; i<=b; ++i)
    #define per(i,b,a) for (int i=b; i>=a; --i)
    #define mes(a,b)  memset(a,b,sizeof(a))
    #define INF 0x3f3f3f3f
    #define MP make_pair
    #define PB push_back
    #define fi  first
    #define se  second
    typedef long long ll;
    const int N = 10005;
    
    int k, s[N], m, mi, a[N], sg[N];
    bool vis[N];
    void getSG()
    {
        mes(sg, 0);
        rep(i,0,N-1)
        {
            mes(vis, 0);
            rep(j,1,k) if(i-s[j]>=0)
                vis[sg[i-s[j]]]=1;
            rep(j,0,N-1) if(vis[j]==0) {
                sg[i]=j;
                break;
            }
        }
    }
    int main()
    {
        scanf("%d", &k);
        rep(i,1,k) scanf("%d", &s[i]);
        getSG();
        scanf("%d", &m);
        rep(i,1,m)
        {
            scanf("%d", &mi);
            int ans=0;
            rep(j,1,mi) {
                scanf("%d", &a[i]);
                ans ^= sg[a[i]];
            }
            if(ans==0) puts("lose!");
            else puts("win!");
        }
    
        return 0;
    }
    View Code

    B    求两圆相交的面积模板

    #define  PI  acos(-1.0)
    struct Circle { double x, y, r; };
    double dis(Circle a, Circle b) {
        return  sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    }
    double IntersectionArea_TwoCircles(Circle c1, Circle c2)
    {
        double s = dis(c1,c2);
        if(c1.r<c2.r) swap(c1, c2);
        if(c1.r+c2.r <= s) return 0;
        else if(s <= c1.r-c2.r) return PI*c2.r*c2.r;
        else {
            double ang1 = acos((c1.r*c1.r+s*s-c2.r*c2.r)/(2*c1.r*s));
            double ang2 = acos((c2.r*c2.r+s*s-c1.r*c1.r)/(2*c2.r*s));
            return ang1*c1.r*c1.r + ang2*c2.r*c2.r - c2.r*s*sin(ang2);
        }
    }

    E    水题

    #include<bits/stdc++.h>
    using namespace std;
    #pragma comment(linker, "/STACK:102400000,102400000")
    #define rep(i,a,b) for (int i=a; i<=b; ++i)
    #define per(i,b,a) for (int i=b; i>=a; --i)
    #define mes(a,b)  memset(a,b,sizeof(a))
    #define INF 0x3f3f3f3f
    #define MP make_pair
    #define PB push_back
    #define fi  first
    #define se  second
    typedef long long ll;
    const int N = 200005;
    
    ll  A(int n, int m)
    {
        ll  ans = 1;
        rep(i,n-m+1,n) ans *= i;
        return ans;
    }
    int main()
    {
        int n;
        scanf("%d", &n);
        printf("%lld
    ", A(n,n)/n*A(n,n));
    
        return 0;
    }
    View Code

    L    第二类斯特林数

    题意: n 个人放在 k个相同的篝火中,问有多少种方案。

    tags:参考大神博客   

    类似于dp递推,dp[i][j]表示 i 个物体放入 j 个盒子的方案数,则 dp[i][j] = j * dp[i-1][j] + dp[i-1][j-1] 。

    #include<bits/stdc++.h>
    using namespace std;
    #pragma comment(linker, "/STACK:102400000,102400000")
    #define rep(i,a,b) for (int i=a; i<=b; ++i)
    #define per(i,b,a) for (int i=b; i>=a; --i)
    #define mes(a,b)  memset(a,b,sizeof(a))
    #define INF 0x3f3f3f3f
    #define MP make_pair
    #define PB push_back
    #define fi  first
    #define se  second
    typedef long long ll;
    const int N = 1005, mod = 1e9+7;
    
    ll dp[N][N], n, k;
    int main()
    {
        rep(i,1,N-1) dp[i][1]=1;
        rep(i,2,N-1) rep(j,1,N-1)
        {
            dp[i][j] = (j*dp[i-1][j]+dp[i-1][j-1]) %mod;
        }
        int T;  scanf("%d", &T);
        while(T--)
        {
            scanf("%lld %lld", &n, &k);
            printf("%lld
    ", (dp[n][k]+mod)%mod);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    Androidの多线程之多线程用法大集合(未整理)
    Androidの多线程之更新ui(Thread+Handler+Message)
    构建之法阅读笔记1
    文件与流
    公文流转系统一
    JAVA web课堂测试1
    10.21动手动脑
    Android学习02
    Android学习01
    Android学习03
  • 原文地址:https://www.cnblogs.com/sbfhy/p/7228998.html
Copyright © 2020-2023  润新知