zoukankan      html  css  js  c++  java
  • BestCoder Round #90 A.Kblack loves flag(随机数生成种子)

    A.Kblack loves flag

    【题目链接】A.Kblack loves flag

    【题目类型】水题
    &题意:

    kblack喜欢旗帜(flag),他的口袋里有无穷无尽的旗帜。

    某天,kblack得到了一个n*m的方格棋盘,他决定把kk面旗帜插到棋盘上。

    每面旗帜的位置都由一个整数对(x,y)来描述,表示该旗帜被插在了第x行第y列。

    插完旗帜后,kblack突然对那些没有插过旗帜的行和列很不满,于是他想知道,有多少行、列上所有格子都没有被插过旗帜。

    kblack还要把妹,于是就把这个问题丢给了你,请你帮他解决。
    &题解:

    这题就是水题,只不过通过这个,我知道了一个生成随机数的方式,可以在输入给个种子,之后程序内生成,好牛逼的样子,值得学习一下

    【时间复杂度】(O(n+m+k))

    &代码:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int INF = 0x3f3f3f3f;
    #define cle(a,val) memset(a,(val),sizeof(a))
    #define SI(N) scanf("%d",&(N))
    #define SII(N,M) scanf("%d %d",&(N),&(M))
    #define SIII(N,M,K) scanf("%d %d %d",&(N),&(M),&(K))
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define red(i,a,b) for(int i=(a);i>=(b);i--)
    const ll LINF = 0x3f3f3f3f3f3f3f3f;
    #define PU(x) cout<<#x<<endl;
    #define PI(A) cout<<(A)<<endl;
    #define DG(x) cout<<#x<<"="<<(x)<<endl;
    #define DGG(x,y) cout<<#x<<"="<<(x)<<" "<<#y<<"="<<(y)<<endl;
    #define DGGG(x,y,z) cout<<#x<<"="<<(x)<<" "<<#y<<"="<<(y)<<" "<<#z<<"="<<(z)<<endl;
    #define PIar(a,n) rep(i,0,n-1)cout<<a[i]<<" ";PU()
    #define PIarr(a,n,m) rep(aa,0,n-1){rep(bb,0,m-1)cout<<a[aa][bb]<<" ";PU()}
    typedef pair<int, int> pii;
    #define fi first
    #define se second
    #define pb push_back
    #define mp make_pair
    #define sz(x) int(x.size())
    #define all(x) x.begin(),x.end()
    const double EPS = 1e-9 ;
    /*  ///////////////////   C o d i n g  S p a c e   ///////////////////  */
    const int maxn = 1000006;
    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);
    }
    bool xx[maxn],yy[maxn];
    void Solve()
    {
    	cle(xx,0);
    	cle(yy,0);
    	Init();
    	rep(i,1,k) xx[x[i]]=1;
    	rep(i,1,k) yy[y[i]]=1;
    	int a1=0,a2=0;
    	rep(i,1,n) if(!xx[i]) a1++;
    	rep(i,1,m) if(!yy[i]) a2++;
    	printf("%d %d
    ",a1,a2);
    }
    int main()
    {
    #ifndef ONLINE_JUDGE
    	freopen("C:\Users\Zmy\Desktop\in.txt", "r", stdin);
    //	freopen("C:\Users\Zmy\Desktop\out.txt", "w", stdout);
    #endif
    //iostream::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    	 int T;cin>>T;while(T--)
    	Solve();
    	return 0;
    }
    
  • 相关阅读:
    P1908 逆序对
    P3834 【模板】可持久化线段树 1(主席树)
    BZOJ 4300: 绝世好题
    Codevs 2185【模板】最长公共上升子序列
    P1439 【模板】最长公共子序列
    P3865 【模板】ST表
    【转】良心的可持久化线段树教程
    Codevs 1299 切水果
    P3388 【模板】割点(割顶)&& 桥
    P3805 【模板】manacher算法
  • 原文地址:https://www.cnblogs.com/s1124yy/p/6193610.html
Copyright © 2011-2022 走看看