wannafly test D
题意:
给定n,m
求满足:
1.a[i][j]互不相同,且有$1<=a[i][j]<=n*m$
2.对于$a[i1][j1],a[i2][j2]$,如果有 $i1 \oplus j1 > i2 \oplus j2$,则有$a[i1][j1] > a[i2][j2]$
的矩形个数,答案取余$10^9+7$
数据组数T<=1000,且n,m <= 1000
解法:
首先注意到我们只要根据$i \oplus j$分类,计算出$cnt(x)$表示$i \oplus j = x$的$i,j$对数。
这样有答案为$\sum_{i=0}^{1024}{cnt(x)!}$
1.(雾)对于每组数据循环i,j然后cnt[i^j]++;,因为 i^j 操作很快所以AC
2.每个询问是关于(n,m)的一个二元组,考虑对n莫队分块,这样复杂度$O(T*n* \sqrt{n} + 1024*T)$
3.考虑fwt,注意到cnt = id(n)*id(m),应用fwt卷积可以$O(T*nlogn)$
\#include <iostream>
#include <cstdio>
#include <cstring>
#include <bitset>
#include <algorithm> #define N 1010
#define LL long long
#define P 1000000007LL using namespace std; struct node
{
int n,m,id;
}a[N]; LL fac[N*N];
LL ansv[N];
int cnt[],SIZE; bool cmp(node a,node b)
{
if((a.n-)/SIZE==(b.n-)/SIZE) return a.m<b.m;
return a.n<b.n;
} LL calc(int n,int m)
{
LL ans=;
for(int i=;i<=;i++)
ans=ans*fac[cnt[i]]%P;
return ans;
} int main()
{
int T;
scanf("%d",&T);
for(int i=;i<=T;i++)
{
scanf("%d%d",&a[i].n,&a[i].m);
a[i].id=i;
}
SIZE = ;
sort(a+,a+T+,cmp);
fac[]=1LL;
for(int i=;i<N*N;i++) fac[i]=fac[i-]*(LL)i%P;
int n=,m=;
for(int i=;i<=T;i++)
{
while(n<a[i].n)
{
n++;
for(int j=;j<=m;j++)
cnt[n^j]++;
}
while(n>a[i].n)
{
for(int j=;j<=m;j++)
cnt[n^j]--;
n--;
}
while(m<a[i].m)
{
m++;
for(int j=;j<=n;j++)
cnt[j^m]++;
}
while(m>a[i].m)
{
for(int j=;j<=n;j++)
cnt[j^m]--;
m--;
}
ansv[a[i].id] = calc(n,m);
}
for(int i=;i<=T;i++) cout << ansv[i] << endl;
return ;
}
wannafly test D的更多相关文章
- NowCoder Wannafly 27E 黄魔法师 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-Wannafly27E.html 题目传送门 - NowCoder Wannafly 27E 题 ...
- 牛客 Wannafly 挑战赛26D 禁书目录 排列组合 概率期望
原文链接https://www.cnblogs.com/zhouzhendong/p/9781060.html 题目传送门 - NowCoder Wannafly 26D 题意 放一放这一题原先的题面 ...
- Wannafly挑战赛25游记
Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...
- 2019 wannafly winter camp day 3
2019 wannafly winter camp day 3 J 操作S等价于将S串取反,然后依次遍历取反后的串,每次加入新字符a,当前的串是T,那么这次操作之后的串就是TaT.这是第一次转化. 涉 ...
- 2019 wannafly winter camp
2019 wannafly winter camp Name Rank Solved A B C D E F G H I J K day1 9 5/11 O O O O O day2 5 3/11 O ...
- Wannafly挑战赛27
Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...
- Wannafly 挑战赛 19 参考题解
这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...
- Wannafly挑战赛21A
题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...
- Wannafly挑战赛24游记
Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...
- Wannafly挑战赛25C 期望操作数
Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...
随机推荐
- Android 中View仅仅能接收到ACTION_DOWN无法接收ACTION_MOVE和ACTION_UP解决的方法
昨天晚上调试了一晚上,在LinearLayout上接收屏幕动作,可是出现了问题, 以下的代码是本人调的代码 </pre><pre name="code" clas ...
- LeetCode120——Triangle
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- springboot实战--笔记
由于这本书看过一遍,所以这里是二次复习,记录的东西比较少,就不分章节了. 共12章,524页,预计时间是18h 第一章 spring基础: 第二章 spring常用配置: bean的Scope:sin ...
- c# winform窗体间的传值
说明:本文讲解两个窗体之间的传值,主要用到两个窗体,form1,form2 1.在form1窗体单击按钮,打开窗体form2,然后把form2中文本框的值传递给form1 form1中的代码: usi ...
- Detours3.0 文档翻译
http://blog.csdn.net/buck84/article/details/8289991 拦截二进制函数 Detours库能够在执行过程中动态拦截函数调用.detours将目标函数前几个 ...
- 不懂不能装懂--邮箱后缀“inc”的含义
之前实习的公司,邮箱域名是XXX@XXX-inc.com 再之前,投递简历了或者关注某个公司的一些信息或者和这些公司的人邮件联系是也发现有这个inc的后缀,一直不明白,今天觉得自己找到答案了,不怕丢人 ...
- spring和springmvc中,Configuration注解Bean重复加载
问题:bean重复加载1.如下代码所示,开启Configuration注解,实现Bean代码注入,发现bean重复加载 @Configuration public class EhCacheConfi ...
- Python序列——Unicode
Unicode是什么 Python中的Unicode 编码与解码 在应用中使用Unicode的建议 1. Unicode是什么 Unicode是对字符进行编码的一种标准.而utf8或者utf-8是根据 ...
- 基于BASYS2的VHDL程序与仿真——50%占空比8分频器
转帖请注明转自http://www.cnblogs.com/connorzx/p/3547673.html 一.新建工程 1.点击File->New Project, 2.点击Next 注:此处 ...
- ansible 文件模块,很实用
摘自: http://blog.csdn.net/kellyseeme/article/details/50545521