发现对角线上的和是一个定值。

然后就不考虑斜着,可以处理出那些行和列是可以放置的。

然后FFT,统计出每一个可行的项的系数和就可以了。

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define mp make_pair #define maxn 200005 struct Complex{
double x,y;
Complex () {}
Complex (double _x,double _y) {x=_x;y=_y;}
Complex operator + (Complex a) {return Complex(x+a.x,y+a.y);}
Complex operator - (Complex a) {return Complex(x-a.x,y-a.y);}
Complex operator * (Complex a) {return Complex(x*a.x-y*a.y,x*a.y+y*a.x);}
}A[maxn],B[maxn],C[maxn]; int t,r,c,n,k,m,len,line[maxn],row[maxn],ang[maxn],rev[maxn],cntl=0,cntr=0,kas=0;
ll ans=0; const double pi=acos(-1.0); void FFT(Complex * x,int n,int flag)
{
F(i,0,n-1) if (rev[i]>i) swap(x[i],x[rev[i]]);
for (int m=2;m<=n;m<<=1)
{
Complex wn=Complex(cos(2*pi/m),flag*sin(2*pi/m));
for (int i=0;i<n;i+=m)
{
Complex w=Complex(1.0,0);
for (int j=0;j<(m>>1);++j)
{
Complex u=x[i+j],v=x[i+j+(m>>1)]*w;
x[i+j]=u+v; x[i+j+(m>>1)]=u-v;
w=w*wn;
}
}
}
if (flag==-1) F(i,0,n-1) x[i].x=(x[i].x+0.3)/n;
} int main()
{
scanf("%d",&t);
while (t--)
{
memset(line,0,sizeof line);
memset(row,0,sizeof row);
memset(ang,0,sizeof ang);
cntl=cntr=0;
scanf("%d%d%d",&r,&c,&k);
F(i,1,k)
{
int x,y;
scanf("%d%d",&x,&y);
x=r-x+1;
if (!line[x]) cntl++;
if (!row[y]) cntr++;
line[x]=1; row[y]=1;
ang[x+y]=1;
}
ans=((ll)r-(ll)cntl)*((ll)c-(ll)cntr);
n=r+c+10;m=1;len=0;
while (m<=n) m<<=1,len++;n=m;
F(i,0,n-1)
{
int ret=0,t=i;
F(j,1,len) ret<<=1,ret|=t&1,t>>=1;
rev[i]=ret;
}
F(i,0,n-1) A[i].x=B[i].x=A[i].y=B[i].y=0;
F(i,1,r) if (!line[i]) A[i].x=1.0;
F(i,1,c) if (!row[i]) B[i].x=1.0;
FFT(A,n,1); FFT(B,n,1);
F(i,0,n-1) C[i]=A[i]*B[i];
FFT(C,n,-1);
F(i,1,r+c) if (ang[i]) ans-=(ll)C[i].x;
printf("Case %d: ",++kas);printf("%lld\n",ans);
}
}

  

UVA 12633 Super Rooks on Chessboard ——FFT的更多相关文章

  1. UVA 12633 Super Rooks on Chessboard [fft 生成函数]

    Super Rooks on Chessboard UVA - 12633 题意: 超级车可以攻击行.列.主对角线3 个方向. R * C 的棋盘上有N 个超级车,问不被攻击的格子总数. 行列好好做啊 ...

  2. UVA 12633 Super Rooks on Chessboard(FFT)

    题意: 给你一个R*C的棋盘,棋盘上的棋子会攻击,一个棋子会覆盖它所在的行,它所在的列,和它所在的从左上到右下的对角线,那么问这个棋盘上没有被覆盖的棋盘格子数.数据范围R,C,N<=50000 ...

  3. [UVA 12633] Super Rooks on Chessboard FFT+计数

    如果只有行和列的覆盖,那么可以直接做,但现在有左上到右下的覆盖. 考虑对行和列的覆盖情况做一个卷积,然后就有了x+y的非覆盖格子数. 然后用骑士的左上到右下的覆盖特判掉那些x+y的格子就可以了. 注意 ...

  4. UVA 12633 Super Rooks on Chessboard (生成函数+FFT)

    题面传送门 题目大意:给你一张网格,上面有很多骑士,每个骑士能横着竖着斜着攻击一条直线上的格子,求没被攻击的格子的数量总和 好神奇的卷积 假设骑士不能斜着攻击 那么答案就是没被攻击的 行数*列数 接下 ...

  5. UVa12633 Super Rooks on Chessboard(容斥 + FFT)

    题目 Source http://acm.hust.edu.cn/vjudge/problem/42145 Description Let’s assume there is a new chess ...

  6. UVA12633 Super Rooks on Chessboard

    题目描述 题解: 第一眼满眼骚操作,然后全部否掉. 然后屈服于题解,才发现这题这么执掌. 首先,如果这个东西是普通的车,那我们可以记录一下$x,y$的覆盖情况,然后减一下; 但是这个可以斜着走. 所以 ...

  7. UVA - 12298 Super Poker II NTT

    UVA - 12298 Super Poker II NTT 链接 Vjudge 思路 暴力开个桶,然后统计,不过会T,用ntt或者fft,ntt用个大模数就行了,百度搜索"NTT大模数&q ...

  8. UVA - 11134 Fabled Rooks[贪心 问题分解]

    UVA - 11134 Fabled Rooks We would like to place n rooks, 1 ≤ n ≤ 5000, on a n × n board subject to t ...

  9. uva 11134 - Fabled Rooks(问题转换+优先队列)

    题目链接:uva 11134 - Fabled Rooks 题目大意:给出n,表示要在n*n的矩阵上放置n个车,并且保证第i辆车在第i个区间上,每个区间给出左上角和右小角的坐标.另要求任意两个车之间不 ...

随机推荐

  1. react的redux无状态组件

    Provider功能主要为以下两点: 在原应用组件上包裹一层,使原来整个应用成为Provider的子组件 接收Redux的store作为props,通过context对象传递给子孙组件上的connec ...

  2. 数据结构期末复习( はち)--VOA图关键路径求法

    题目如下图: 注:将123456当成abcdef. 事件最早发生事件求法:找从原点到该事件的最长路径(从前往后推) 对a:Ve=0 对b:Ve=max{ 2 , 15+4 }=19 对c:Ve=15 ...

  3. linux网络编程之断点传输文件

    以下载链接"http://www.boa.org/boa-0.94.13.tar.gz"为例: 断点续传实验大概步骤: ===================== 1,使用geth ...

  4. oracle常用运维sql语句

    1.查询dblink语句 col owner for a20col db_link for a30col username for a20col host for a30set linesize 12 ...

  5. Java - 类加载的时候,是有缺省同步锁的

    类加载的时候,是有缺省同步锁的

  6. find cat sed awk 简单组合使用

    find:查找 // .表示当前目录:   /表示根目录:  | 管道符:  xargs表示将前面的搜索接口作为参数传递到后面的命令中:grep 过滤 // xxxx表示文件名 1.查找指定文件名的文 ...

  7. 快速搭建lvs + keepalived + nginx

      环境:   VIP         192.168.2.224 LVS        192.168.2.217     centos7 nginx1    192.168.2.231     c ...

  8. 二十七、MySQL 复制表

    MySQL 复制表 如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE ... SELECT 命令,是无法实现的. 本章节将为大家介绍如何完 ...

  9. oop 单例模式

  10. stm32 flash和sram

    FLASH是用来存储程序的,SRAM是用来存储程序运行中的中间变量