• Codeforces 392 C Unfair Poll(模拟)


    题意:老师点名顺序规则如下:第1排,第2排,……,第n-1排,第n排,第n-1排,……,第2排,第1排,第2排,……,第n-1排,第n排,……对于每排都是从左到右依次点名,问点名k个人后,所有人中最多的点名次数,最少的点名次数,以及位于x排y列处的同学的点名次数。

    分析:

    1、由于k很大,将第1排,第2排,……,第n-1排,第n排,第n-1排,……,第2排看成一个循环。

    2、这个循环中有2*(n-1)*m个人,注意当n=1时,这个循环中有m个人,将这个循环人数记为tmp。

    3、利用k/tmp,算出每个人在k/tmp次循环后的点名次数,再按点名规则将第k/tmp + 1次循环中应当被点到名的人涂色即可。

    #include<bits/stdc++.h>
    #define Min(a, b) ((a < b) ? a : b)
    #define Max(a, b) ((a < b) ? b : a)
    typedef long long LL;
    typedef unsigned long long LLU;
    const int INT_INF = 0x3f3f3f3f;
    const int INT_M_INF = 0x7f7f7f7f;
    const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
    const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
    const int MOD = 1e9 + 7;
    const double pi = acos(-1.0);
    const double eps = 1e-8;
    const int MAXN = 100 + 10;
    const int MAXT = 500 + 10;
    using namespace std;
    LL ans[MAXN][MAXN];
    int main(){
        LL n, m, k, x, y;
        while(scanf("%I64d%I64d%I64d%I64d%I64d", &n, &m, &k, &x, &y) == 5){
            memset(ans, 0, sizeof ans);
            LL tmp = (n == 1) ? m : 2 * (n - 1) * m;
            for(LL j = 1; j <= m; ++j){
                for(LL i = 1; i <= n; ++i){
                    if(i == 1 || i == n) ans[i][j] = k / tmp;
                    else ans[i][j] = k / tmp * 2;
                }
            }
            LL yu = k % tmp;
            for(LL i = 1; i <= n; ++i){
                for(LL j = 1; j <= m; ++j){
                    if(yu){
                        ++ans[i][j];
                        --yu;
                    }
                    else break;
                }
            }
            for(LL i = n - 1; i > 1; --i){
                for(LL j = 1; j <= m; ++j){
                    if(yu){
                        ++ans[i][j];
                        --yu;
                    }
                    else break;
                }
            }
            LL ma = 0;
            LL mi = 1e18;
            for(LL i = 1; i <= n; ++i){
                for(LL j = 1; j <= m; ++j){
                    ma = Max(ma, ans[i][j]);
                    mi = Min(mi, ans[i][j]);
                }
            }
            printf("%I64d %I64d %I64d\n", ma, mi, ans[x][y]);
        }
        return 0;
    }
  • 相关阅读:
    js库链接
    小程序实现textarea行数自动增加
    小程序中公告消息自动向左滚动(关闭三次之后不再提示公告信息)
    jQuery实现点击div外的区域,来隐藏指定节点
    Unity AssetBundle爬坑手记
    换装demo随手记
    Untiy PoolManager随手记
    unity常用插件
    Untiy一些方法前特殊标签记录
    Unity网格合并_材质合并
  • 原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/6357703.html
Copyright © 2020-2023  润新知