BestCoder Round #90 Kblack loves flag
问题描述
kblack喜欢旗帜(flag),他的口袋里有无穷无尽的旗帜。
某天,kblack得到了一个n∗mn*mn∗m的方格棋盘,他决定把kkk面旗帜插到棋盘上。
每面旗帜的位置都由一个整数对(x,y)\left(x,y \right)(x,y)来描述,表示该旗帜被插在了第xxx行第yyy列。
插完旗帜后,kblack突然对那些没有插过旗帜的行和列很不满,于是他想知道,有多少行、列上所有格子都没有被插过旗帜。
kblack还要把妹,于是就把这个问题丢给了你,请你帮他解决。
输入描述
由于本题输入数据较大,所以采取在程序内生成数据的方式。
随机数产生器中有个内部变量xxx初始时为seedseedseed,seedseedseed是我们提供的随机种子。每次请求生成一个[l,r]\left[l,r \right][l,r]内的随机数时,它会将xxx变为(50268147x+6082187) mod 100000007\left(50268147x+6082187\right)\ mod\ 100000007(50268147x+6082187) mod 100000007,然后返回x mod (r−l+1)+lx\ mod\ \left(r-l+1 \right)+lx mod (r−l+1)+l。
输入包含多组数据。第一行有一个整数TTT,表示测试数据的组数,对于每组数据:
输入一行3个整数nnn,mmm,kkk,seedseedseed分别表示棋盘的行数、列数、棋盘上旗帜的面数、随机种子。
接下来,你需要按顺序生成k面旗帜的位置信息。
对于每面旗帜,依次生成一个[1,n]\left[1,n \right][1,n]内的随机数和一个[1,m]\left[1,m \right][1,m]内的随机数,分别表示xxx,yyy。
如果你无法理解数据生成的过程,你可以复制以下代码并调用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)\left(1\leq T\leq 7 \right)(1≤T≤7),(1≤n,m≤1000000)\left(1\leq n,m\leq 1000000 \right)(1≤n,m≤1000000),(0≤k≤1000000)\left(0\leq k\leq 1000000 \right)(0≤k≤1000000),(0≤seed<100000007)\left(0\leq seed<100000007 \right)(0≤seed<100000007)
输出描述
对于每组测试数据输出一行2个整数,分别表示没有被插过旗帜的行、列数目。
输入样例
2
4 2 3 233
3 4 4 2333
输出样例
2 1
1 0
Hint
第1组数据的旗帜的位置依次为:(4,2)\left(4,2\right)(4,2),(1,2)\left(1,2\right)(1,2),(1,2)\left(1,2\right)(1,2)第2组数据的旗帜的位置依次为:(2,1)\left(2,1 \right)(2,1),(2,3)\left(2,3\right)(2,3),(3,4)\left(3,4\right)(3,4),(3,2)\left(3,2\right)(3,2)
 
一开始直接用set保存旗帜的位置结果超时了,然后换成用vector储存,输入完成后排一下序,以行为例,定义vector<int>x,x中的最大值减去x中不重复出现的整数的个数,比如x={1,1,1,2,3,4,6},那么x中不重复出现的整数的个数为5,最大值为6,6-5=1也就是没有插旗帜的总行数
AC代码:
#include<cstdio>
#include<iostream>
#include<math.h>
#include<string>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;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;void Init() {scanf("%d%d%d%d", &n, &m, &k, &seed);vector<int> x, y;_X = seed;for (int i = 1; i <= k; ++i){x.push_back(get_rand(1, n));y.push_back(get_rand(1, m));}sort(x.begin(), x.end());sort(y.begin(), y.end());int temx=1, temy=1;for (vector<int>::size_type i=1; i < x.size(); i++){if (x[i] != x[i - 1])temx++;}for (vector<int>::size_type i = 1; i < y.size(); i++){if (y[i] != y[i - 1])temy++;}cout << x[x.size() - 1] - temx << " " << y[y.size() - 1] - temy << endl;
}int main()
{int i;cin >> i;while (i--){Init();}return 0;
}
 

BestCoder Round #90 Kblack loves flag相关推荐

  1. 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II

    题目传送门 1 /* 2 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 3 当然有可能两个数和超过p,那么an ...

  2. HDU 5228 ZCC loves straight flush( BestCoder Round #41)

    题目链接:ZCC loves straight flush 题面: ZCC loves straight flush Time Limit: 2000/1000 MS (Java/Others)    ...

  3. 字符串处理 BestCoder Round #43 1001 pog loves szh I

    题目传送门 1 /* 2 字符串处理:是一道水题,但是WA了3次,要注意是没有加'\0'的字符串不要用%s输出,否则在多组测试时输出多余的字符 3 */ 4 #include <cstdio&g ...

  4. BestCoder Round #78 (div.2)_B_ CA Loves GCD

    CA Loves GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) T ...

  5. hdu4585 amp; BestCoder Round #1 项目管理(vector应用)

    主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 项目管理 Time Limit: 2000/1000 MS (Java/Others)    M ...

  6. 矩阵快速幂---BestCoder Round#8 1002

    当要求递推数列的第n项且n很大时,怎么快速求得第n项呢? 可以用矩阵快速幂来加速计算. 我们可以用矩阵来表示数列递推公式 比如fibonacci数列 可以表示为 [f(n)   f(n-1)] = [ ...

  7. hdu4932 Miaomiao#39;s Geometry (BestCoder Round #4 枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4932 Miaomiao's Geometry Time Limit: 2000/1000 MS (Ja ...

  8. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  9. 贪心 BestCoder Round #39 1001 Delete

    题目传送门 1 /* 2 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 3 否则再在tot里减去多余的即为答案 4 用set容器也可以做,思 ...

最新文章

  1. 这是时间的推移 不是系统的分类
  2. 微型数据中心正在向边缘发展
  3. android 插桩工具,Android Asm 插桩 教学项目
  4. 2020对于音视频行业意味着什么?
  5. python中if __name__ == ‘__main__‘:的简单理解
  6. C、C++申请指针内存的问题
  7. 从欧拉公式看三角波的单边谱与双边谱
  8. python删除指定字符_python删除字符串中指定字符的方法
  9. saas mysql数据库设计_SaaS模式实现架构实例分析=数据库层的设计
  10. linux查看网口位置命令,Linux下查看网卡信息及确定网卡位置
  11. 【分享】这款微信电子名片真的很值得拥有!
  12. 「技术架构」TOGAF建模:环境和位置图
  13. Python 功能函数round解析
  14. 随风摇曳的她——美蕨(matlab实现)
  15. 关于部分积分,动能公式另一种推导
  16. 是时候来了解android7了:通知直接回复
  17. 软件需求工程 高校教学平台 软件需求规格说明书 part 1 (重点!!!)
  18. 搜索控件SearchView的用法
  19. abs() 数字取绝对值
  20. 麦穗理论,又名“秘书问题”(1/e处为最优分割点)

热门文章

  1. RDL报表制作和发布
  2. Scott Mitchell 的ASP.NET 2.0数据教程之十七:: 研究插入、更新和删除的关联事件
  3. java比c,Java比C ++更好
  4. Python—requests模块详解
  5. java 类型转换方法_Java中的实用类型转换的方法
  6. c语言内部超链接,HTML5中文本元素超链接的属性
  7. AcWing 894. 拆分-Nim游戏
  8. AcWing 143. 最大异或对
  9. Mysql生产环境表更新方案_生产环境中,数据库升级维护的最佳解决方案flyway
  10. Redisson实现分布式锁