HDU5995 Kblack loves flag
来源:互联网 发布:sql server forceseek 编辑:程序博客网 时间:2024/05/16 05:46
问题描述
kblack喜欢旗帜(flag),他的口袋里有无穷无尽的旗帜。某天,kblack得到了一个n∗m的方格棋盘,他决定把k面旗帜插到棋盘上。每面旗帜的位置都由一个整数对(x,y)来描述,表示该旗帜被插在了第x行第y列。插完旗帜后,kblack突然对那些没有插过旗帜的行和列很不满,于是他想知道,有多少行、列上所有格子都没有被插过旗帜。kblack还要把妹,于是就把这个问题丢给了你,请你帮他解决。
输入描述
由于本题输入数据较大,所以采取在程序内生成数据的方式。随机数产生器中有个内部变量x初始时为seed,seed是我们提供的随机种子。每次请求生成一个[l,r]内的随机数时,它会将x变为(50268147x+6082187) mod 100000007,然后返回x mod (r−l+1)+l。输入包含多组数据。第一行有一个整数T,表示测试数据的组数,对于每组数据:输入一行3个整数n,m,k,seed分别表示棋盘的行数、列数、棋盘上旗帜的面数、随机种子。接下来,你需要按顺序生成k面旗帜的位置信息。对于每面旗帜,依次生成一个[1,n]内的随机数和一个[1,m]内的随机数,分别表示x,y。如果你无法理解数据生成的过程,你可以复制以下代码并调用Init函数来生成数据(限C++选手)。`const int _K=50268147,_B=6082187,_P=100000007;int _X;inline int get_rand(int _l,int _r){_X=((long long)_K*_X+_B)%_P;return _X%(_r-_l+1)+_l;}int n,m,k,seed;int x[1000006],y[1000006];void Init(){scanf("%d%d%d%d",&n,&m,&k,&seed);_X=seed;for (int i=1;i<=k;++i)x[i]=get_rand(1,n),y[i]=get_rand(1,m);}`(1≤T≤7),(1≤n,m≤1000000),(0≤k≤1000000),(0≤seed<100000007)
输出描述
对于每组测试数据输出一行2个整数,分别表示没有被插过旗帜的行、列数目。
输入样例
24 2 3 2333 4 4 2333
输出样例
2 11 0
Hint
第1组数据的旗帜的位置依次为:(4,2),(1,2),(1,2)
简单题,搞两个数组弄一下就好了#include<cmath> #include<queue> #include<cstdio> #include<cstring> #include<algorithm> using namespace std;#define ms(x,y) memset(x,y,sizeof(x)) #define rep(i,j,k) for(int i=j;i<=k;i++) #define loop(i,j,k) for (int i=j;i!=-1;i=k[i]) #define inone(x) scanf("%d",&x) #define intwo(x,y) scanf("%d%d",&x,&y) #define inthr(x,y,z) scanf("%d%d%d",&x,&y,&z) #define lson x<<1,l,mid #define rson x<<1|1,mid+1,r typedef long long LL;const int mod = 1e9 + 7;const int N = 1e6 + 10;int T;const int _K = 50268147, _B = 6082187, _P = 100000007;int _X;inline int get_rand(int _l, int _r) { _X = ((long long)_K*_X + _B) % _P; return _X % (_r - _l + 1) + _l;}int n, m, k, seed;int x[1000006], y[1000006];void Init() { scanf("%d%d%d%d", &n, &m, &k, &seed); _X = seed; for (int i = 1; i <= k; ++i) x[i] = get_rand(1, n), y[i] = get_rand(1, m);}int f[N], g[N];int main(){ inone(T); while (T--) { Init(); ms(f, 0); ms(g, 0); for (int i = 1; i <= k; ++i) { if (!f[x[i]]++) n--; if (!g[y[i]]++) m--; } printf("%d %d\n", n, m); } return 0;}
0 0
- HDU5995 Kblack loves flag
- HDU5995 Kblack loves flag
- HDU5995 Kblack loves flag
- HDU5995 Kblack loves flag
- Kblack loves flag
- bc Kblack loves flag
- BC-【Kblack loves flag】
- Kblack loves flag hdu
- hudu5995 Kblack loves flag
- HDU 5995 Kblack loves flag
- hdu 5995 Kblack loves flag
- hdu 5995 Kblack loves flag
- hdu 5995 Kblack loves flag
- BestCoder Round #90 Kblack loves flag
- 【HDOJ】5995 (BestCoder Round #90)Kblack loves flag
- hdu5995 H
- 【枚举计数】HDU5995Kblack loves flag【BestCoder Round #90】
- FLag
- 119. Pascal's Triangle II
- FTP服务器之间文件传输
- 图形界面修改ubunut终端字体
- 设计模式-单例模式
- php composer安装和使用教程
- HDU5995 Kblack loves flag
- 排序算法-冒泡排序
- 1258
- linux输入子系统
- 装两个不同版本MySQL的方法
- Android 动画框架的基本原理
- HDU 5996 dingyeye loves stone
- linux起源
- 1260