CF #392(2) C 暴力模拟

CF #392(2)  C. Unfair Poll

题意:n行m列人,老师点k次名。点名次序,每一行都是从1到m,但行是按1,2....(n-1),n,(n-1),(n-2)...1,2,3....(n-1),n.....求点完k次名后被点的最多的次数和最少的次数,以及给定的(x,y)被点次数。

总结:有点麻烦,但还是很好找规律,只是fst了,有时间再写一遍。。。还是太菜了,连着三场CF都是fst

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define F(i,a,b)  for (int i=a;i<b;i++)
#define FF(i,a,b) for (int i=a;i<=b;i++)
#define mes(a,b)  memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
typedef long long ll;
const int N = 1e5+10;
const ll inf = 1.5e18;

int main()
{
    int n, m, x, y;
    ll k, a[150][150];
    while(cin>>n>>m>>k>>x>>y) {
        mes(a,0);
        ll num;
        if(n==1) {
            num= k/m, k%=m;
            FF(j,1,m) a[1][j]=num;
            FF(j,1,m) {
                if(k==0) break;
                k--, a[1][j]++;
            }
        }
        else {
            FF(j,1,m) {
                if(k==0) break; k--;
                a[1][j]++;
            }
            num= k/ ((n-1)*m );
            k%= (n-1)*m;
            if(num&1) {
                FF(i,1,n) FF(j,1,m) {
                    if(i==1) a[i][j] += (num>>1);
                    else if(i==n) a[i][j] += ((num>>1)+1LL);
                    else a[i][j] += num;
                }
                for(int i=n-1; i>=1; i--) {
                    if(k==0) break;
                    FF(j,1,m) {
                        if(k==0) break;
                        k--, a[i][j]++;
                    }
                }
            } else {
                FF(i,1,n) FF(j,1,m) {
                    if(i==1 || i==n) a[i][j]+= (num>>1);
                    else a[i][j]+= num;
                }
                FF(i,2,n) {
                    if(k==0) break;
                    FF(j,1,m) {
                        if(k==0) break;
                        k--, a[i][j]++;
                    }
                }
            }
        }
        ll maxn=-inf, minn=inf, mm;
        FF(i,1,n) FF(j,1,m) {
            if(maxn<a[i][j]) maxn=a[i][j];
            if(minn>a[i][j]) minn=a[i][j];
            if(x==i && y==j) mm=a[i][j];
        }
        cout<<maxn<<" "<<minn<<" "<<mm<<endl;
    }

    return 0;
}
//2 2 6 1 1
//3 5 1 2 1

时间: 2024-10-09 20:38:38

CF #392(2) C 暴力模拟的相关文章

hdu 5641 King&#39;s Phone(暴力模拟题)

Problem Description In a military parade, the King sees lots of new things, including an Andriod Phone. He becomes interested in the pattern lock screen. The pattern interface is a 3×3 square lattice, the three points in the first line are labeled as

HDU 4831 Scenic Popularity 暴力模拟

Scenic Popularity Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 340    Accepted Submission(s): 110 Problem Description 临近节日,度度熊们最近计划到室外游玩公园,公园内部包括了很多的旅游景点区和休息区,由于旅游景点很热门,导致景点区和休息区都聚集了很多人.所以度度熊

HDU 4858 项目管理(邻接表 暴力模拟)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的! 两个节点间可能有多条边,不过一条边的两端必然是不同的节点.每个节点都有一个能量值. 现在我们要编写一个项目管理软件,这个软件呢有两个操作:1.给某个项目的能量值加上一个特定值.2.询问跟一个项目相邻的项目的能量值之和.(如果有多条边就算多次,比如a和b有2条边,那么询问a的时候b的权值算2次). 解题报告:这个

201/7/31-zznuoj-问题 A: A + B 普拉斯【二维字符串+暴力模拟+考虑瑕疵的题意-0的特例】

问题 A: A + B 普拉斯 在计算机中,数字是通过像01像素矩阵来显示的,最终的显示效果如下:  现在我们用01来构成这些数字 当宝儿姐输入A + B 时(log10(A)<50,log10(B)<50,且A,B均为正整数),你来计算A+B的和C,并按格式在屏幕上打印C. 输入 每组输入包括两个非负整数 A,B(log10(A)<50,log10(B)<50),已EOF结束输入 输出 按格式在屏幕中打印C,数字之间相隔三列0. 样例输入 3 8 样例输出 00100000001

2017/7/31-zznu-oj-问题 B: N! 普拉斯 -【求大数的阶乘-ll存不下-然后取尾零的个数输出-暴力模拟】

问题 B: N! 普拉斯 时间限制: 1 Sec  内存限制: 128 MB提交: 114  解决: 35[提交] [状态] [讨论版] [命题人:admin] 题目描述 在处理阶乘时也需要借助计算器. 在计算机中,数字是通过像01像素矩阵来显示的,最终的显示效果如下:  宝儿姐一直在思考一个问题,N!末尾究竟有多少个0?我们假设N!末尾有k个0,请按照规则打印k. 输入 输入一个正整数n(n< 50) ,输入以EOF结尾. 输出 我们假设N!末尾有k个0,请按照规则打印k,数字之间间隔3列0.

CF - 392 C. Yet Another Number Sequence (矩阵快速幂)

CF - 392 C. Yet Another Number Sequence 题目传送门 这个题看了十几分钟直接看题解了,然后恍然大悟,发现纸笔难于描述于是乎用Tex把初始矩阵以及转移矩阵都敲了出来 \(n\le 1e17\) 这个数量级求前缀和,发现递推关系之后矩阵快速幂是可以求出来的,所以就尝试把\(A_i(k)\) 的递推式求出来. \[ A_{i-1}(k) = F_{i-1} * (i-1) ^ k\A_{i-2}(k) = F_{i-2} * (i-2) ^ k \] \[ \be

[ 9.11 ]CF每日一题系列—— 441C暴力模拟

Description: n * m 的地图,建设k个管道管道只能横竖走,且长度大于等于2,问你任意一种建设方法 Solution: 图里没有障碍,所以先把前k - 1个管道每个分2个长度,最后一个管道一连到底 Code: PS:今天时间没来的急,其实函数可以封装一下的,虽然都是暴力,但也得暴力的优美不是?? #include <iostream> #include <cstdio> using namespace std; int main() { int n,m,k; whil

HDU 1032 [The 3n + 1 problem] 暴力模拟

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1032 题目大意:给出i,j,要求输出i j之间"3N+1"的循环次数的最大值. 关键思想:暴力,模拟.可以优化,因为某些大数在进行操作时,会变为已经求过的小数,之后的循环次数已求过. 代码如下: //between i,j 模拟,暴力 #include <iostream> #include <algorithm> using namespace std; int

CF 378(2) C D 模拟

CF 378(2)   好坑,有时间再做一遍 CodeForces 733C 题意:n只怪物,每只重ai,一开始有给定序列a[].问最后是否能变到x只特定序列b[],变化只能是相邻的大吃小. 题解:坑死人的题,,但不要怕去写这种题,在草稿纸上写好思路,一定要动手写.  思路:先把a[]根据b[]进行分段,再对每一段进行分析.细节太多,不自己动手写一遍根本体会不到.. #include<bits/stdc++.h> using namespace std; #pragma comment(lin