Divide by Zero 2021 and Codeforces Round #714 (Div. 2)B. AND Sequences(位运算 + 思维 + 排列)
传送门
题意:
给出一个数列,交换数列数的位置,来使得对于任何一个i都有a1&a2&…&ai=ai+1&ai+2&…&an;求出满足条件的排列的总个数;
思路:
任何一个i都有a1&a2&…&ai=ai+1&ai+2&…&an 成立,则要满足:
a1 = a2&a3&…&an-1&an;
a1 & a2&a3&…&an-1=an;
即a1=an=a1&a2&a3…&an-1&an;
所以我们要找出两个数
和所有数的与
相等来作为数列的首尾
;
则我们需要去找数列中有多少个数
和所有数的与
相等,记为c
,如果个数小于2,则输出no;
如果个数大于等于2,则答案就是(n - 2)! * Ac2% \f is defined as #1f(#2) using the macro A_c^{2}Ac2
代码:
#include <iostream>
#include <cstring>
#include <cmath>
#include <string>
#include <algorithm>
#include <queue>
#include <utility>
#include <stack>
#define mes memset
#define mec memcpyusing namespace std;typedef long long ll;
typedef pair<int,int>PII;const int N = 200010;
const int null = 0x3f3f3f3f;
const ll mod = 1000000007;int T;
int n;
ll a[N];int main()
{cin >> T;while(T --){cin >> n;for(int i = 1;i <= n;i ++) cin >> a[i];ll x = a[1];for(int i = 2;i <= n;i ++) x &= a[i];//cout << x << endl;ll cnt = 0;for(int i = 1;i <= n;i ++){if(a[i] == x) cnt ++;}//cout << cnt << endl; if(cnt < 2){cout << 0 << endl;continue;}int z = cnt;// cout << cnt << endl;cnt *= (cnt - 1);cnt %= mod;// cout << cnt << endl;ll y = 1;//cout << z << endl;for(int i = 2;i <= n - 2;i ++) y *= i,y %= mod;cout << (cnt * y) % mod << endl;}return 0;
}
Divide by Zero 2021 and Codeforces Round #714 (Div. 2)B. AND Sequences(位运算 + 思维 + 排列)相关推荐
- Codeforces Round #732 (Div. 2) C. AquaMoon and Strange Sort 思维
传送门 文章目录 题意: 思路: 题意: 给你nnn个数,每个数初始方向是向右,每次可以交换相邻两个位置并且将这两个位置的方向调换,问这个序列的最终状态能否是非递减且方向都向右. n≤1e5,ai≤1 ...
- Codeforces Round #588 (Div. 2) D. Marcin and Training Camp 思维
传送门 文章目录 题意: 思路: 题意: 有nnn个人,每个人都有一个能力值bib_ibi以及他会的技能aia_iai,当他会第xxx个技能的时候,aia_iai的第xxx位是111.定义当xx ...
- Codeforces Round #727 (Div. 2) E. Game with Cards dp + 思维
传送门 文章目录 题意: 思路: 题意: 初始有左右手,上面各有一个数字为000的卡牌,每次都有一个新卡kik_iki,你可以将其放在左手或者右手,使两只手上的卡片范围在[ll,i,rl,i][l_ ...
- Codeforces Round #715 (Div. 1) C. Complete the MST 补图 + 思维 + 最小生成树
传送门 文章目录 题意: 思路 题意: 给你一张nnn个点mmm个边的图,mmm条边是给定的,要求你给未给定的边赋值一个边权,使得所有边权异或和为000,求所有满足这种情况的图中最小生成树边权和最小的 ...
- Codeforces Round #632 (Div. 2) C. Eugene and an array 思维 + 前缀和
传送门 文章目录 题意: 思路: 题意: 给定一个长度为nnn的序列aaa,定义一段区间为好区间是这段区间的所有连续子区间的和都不为000,求好区间的个数. 思路: 套路题,定义aia_iai的前缀 ...
- Codeforces Round #462 (Div. 2) C. A Twisty Movement dp + 思维转换
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的只包含1,21,21,2的序列aaa,你可以至多翻转一段区间,求翻转之后最长非递减子序列是多长. 思路: 考虑如果翻转的话,翻转的子区间 ...
- Codeforces Round #626 (Div. 2) D. Present 按位贡献 + 快排新姿势
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,让你计算 n≤4e5,a≤1e7n\le 4e5,a\le 1e7n≤4e5,a≤1e7 思路: 首先这个式子是n2n^2n ...
- Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造
传送门 文章目录 题意: 思路: 题意: 给你n,dn,dn,d,让你构造有nnn个点的二叉树,他们每个节点深度和为ddd. n,d≤3000n,d\le 3000n,d≤3000. 思路: 先考虑不 ...
- Codeforces Round #617 (Div. 3) E2. String Coloring (hard version) 思维 + dp + Dilworth定理
传送门 文章目录 题意: 思路: 题意: 让你给一个串染色,不同颜色且相邻的一对字符可以互换位置,用最少的颜色,使交换后这个字符串字典序最小. 思路: 考虑将字符串分成若干个非递减的子序列,由于其非递 ...
- Divide by Zero 2018 and Codeforces Round #474 (Div. 1 + Div. 2, combined)
思路:把边看成点,然后每条边只能从下面的边转移过来,我们将边按照u为第一关键字,w为第二关键字排序,这样就能用线段树维护啦. 1 #include<bits/stdc++.h> 2 #de ...
最新文章
- laravel CURD 查询构造器
- 使用Facebook方法处理复杂问题
- 聊聊springboot2的embeded container的配置改动
- HTML marquee标签详解
- python多线程编程(4): 死锁和可重入锁
- Android BroadcastReceiver,广播与进程通讯,APK安装广播,获取已安装列表
- 解决pytouch导入模型报错:AttributeError: Can‘t get attribute ‘XXX‘ on <module ‘__main__‘ from XXX>
- c 程序设计语言第1 3部分,《C程序设计语言(第2版新版)典藏版》 —1.3 for语句...
- cogs 1111. 最短路
- 计算机操作员高级教学大纲,计算机操作员课程教学大纲.doc
- 【luogu 3868】中国剩余定理模板题
- win2000修改主机名称
- 【正则】字符串按一定规则做替换
- golang not enough arguments in call to uuid.Must have (uuid.UUID) want (uuid.UUID, error)
- outlook自动保存html,outlook怎么编辑HTML源文件
- Win7系统应用技巧集锦
- mysql的_Mysql
- 网新恒天外派道富电话面试
- 有人说Python是青铜?我用50行Python代码绘制3D机场分布图
- 目标检测——day45 Deep Affinity Network for Multiple Object Tracking