P3913 车的攻击

Posted tcwbob

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3913 车的攻击相关的知识,希望对你有一定的参考价值。

题目描述

N imes NN×N 的国际象棋棋盘上有KK 个车,第ii个车位于第R_iRi?行,第C_iCi? 列。求至少被一个车攻击的格子数量。

车可以攻击所有同一行或者同一列的地方。

输入格式

第1 行,2 个整数N,KN,K。

接下来K 行,每行2 个整数R_i,C_iRi?,Ci?

输出格式

1 个整数,表示被攻击的格子数量。

输入输出样例

输入 #1
3 2
1 2
2 2
输出 #1
7

说明/提示

• 对于30% 的数据,1 le N le 10^3; 1 le K le 10^31N103;1K103;

• 对于60% 的数据,1 le N le 10^6; 1 le K le 10^61N106;1K106;

• 对于100% 的数据,1 le N le 10^9; 1 le K le 10^6; 1 le R_i , C_i le N1N109;1K106;1Ri?,Ci?N。

本次小编为大家带来洛谷P3913车的攻击 题解。

这题看这十分麻烦,一开始小编也绕晕了,用二维数组遍历枚举,后来因方法太笨(其实也有TIE的原因)放弃了,看到了一位大佬的思路才有了思路。

这题分为三步:

      {

        1.运用sort的排序将所有的车集合再左上角。

        2.通过车载左上角后,统计出行不重复的数量s;及列不重复的数量s1.

        3.利用得出的公式n*n-(n-s)*(n-s1)。算出被攻击的格子数量

      }

举个大佬举过的例子:假设车的坐标在1,2与3,4.

          一三,二四行的格子就被攻击了。

          把被攻击的放在左上角。

          没被攻击的就为(n-2)*(n-2)。

          再求出没被求出的格子个数。

感谢那位大佬的思路提供,小编一定会成为你那样的大佬。

上代码!

#include<iostream>

#include<cstdio>

#include<algorithm>

using namespace std;

long long n,k,a[1000002]={0},b[1000002]={0},i,s=0,s1=0;

int main()

{

  scanf("%lld %lld",&n,&k);

  for(i=1;i<=k;i++)

   {

     scanf("%lld %lld",&a[i],&b[i]);

   }

  sort(a+1,a+k+1);

  sort(b+1,b+k+1);

   for(i=1;i<=k;i++)

   {

     if(a[i]!=a[i+1])

    {

      s++;

     }

    if(b[i]!=b[i+1])

     {

       s1++;

     }

  }

  printf("%lld",n*n-(n-s)*(n-s1));

 }

以上是关于P3913 车的攻击的主要内容,如果未能解决你的问题,请参考以下文章

P3913 车的攻击

创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量。 编写两个构造方法:一个没有(代码片段

11.按要求编写Java应用程序。 创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的(代码片段

按要求编写Java应用程序。 创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量(代码片段

[前缀和] Jzoj P3913 艰难的选择

车的放置