• P3913 车的攻击


    大致题意:

    • 求出被车攻击到的格子

    基本思路:

    • 如果直接暴力出奇迹的话是存不下的,
    • 所以就以另外的思路来想。
    • 容斥原理!
    • 我们可以先把那些在同一行或同一列的车去重,然后把去重后的行数列数记作cntx,cnty,
    • 然后以cntx*n+cnty*n为答案,但是这答案里面有重复的,那么有多少重复的呢?
    • 先看一幅图:
    • Snipaste_2020-05-08_10-10-15.png
    • 那么减去cntx*cnty就是最终的答案了。

    Code:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <list>
    using namespace std;
    #define R read()
    #define GC getchar()
    #define ll long long
    #define ull unsigned long long
    #define INF 0x7fffffff
    #define LLINF 0x7fffffffffffffff
    ll read(){
        ll s=0,f=1;
        char c=GC;
        while(c<'0'||c>'9'){if(c=='-')f=-f;c=GC;}
        while(c>='0'&&c<='9'){s=s*10+c-'0';c=GC;}
        return s*f;
    }
    int n,k;
    int x[1000010],y[1000010];
    ll ans,cntx,cnty;
    int main(){
        n=R;k=R;
        for(int i=1;i<=k;++i){
            x[i]=R;y[i]=R;
        }
        sort(x+1,x+k+1);//排序
        sort(y+1,y+k+1);
        for(int i=1;i<=k;++i){//去重
            if(x[i]!=x[i+1]){
                ++cntx;
            }
            if(y[i]!=y[i+1]){
                ++cnty;
            }
        }
        ans=cntx*n+cnty*n-cntx*cnty;//容斥
        printf("%lld",ans);//输出
        return 0;
    }
    
  • 相关阅读:
    Python进阶之浅谈内置方法(补充)
    Python进阶之浅谈内置方法
    Python运算符优先级
    python之浅谈循环
    MTCNN
    MTCNN
    tf.train.batch and tf.train.shuffle_batch
    tf.add_to_collection 和 tf.get_collection 和 tf.add_n
    tensorflow 迁移学习-Demo
    tensorflow 加载预训练模型进行 finetune 的操作解析
  • 原文地址:https://www.cnblogs.com/FUXyao/p/12848876.html
Copyright © 2020-2023  润新知