牛客NOIP暑期七天营-提高组3
第一题:破碎的矩阵
题目链接:https://ac.nowcoder.com/acm/contest/932/A
刚看到这题的时候感觉特别熟悉...诶,这不就是codeforces某场比赛的某某题吗?(心里激动了一波)仔细看完题目
才发现这并不是codeforces那道构造题,但是多多少少还是有点类似...那题是问我们矩阵是否可以构造,这题则问的
是最多可以构造几个符合题意的矩阵。
首先要做的和cf那题一样都是先将每行的异或和异或后存于ans1,每列的异或和异或后存于ans2,这样ans1就等于每
一行的每个元素异或总和,ans2就等于每一列的每个元素异或总和。
很快我们会发现ans1、ans2其实就是这个矩阵的每一个元素的异或和,那么当ans1^ans2==0(即ans1 == ans2)时,
用题目数据构造出来的矩阵就是合法的了,否则该矩阵不存在,直接输出0即可。
那么当矩阵合法的时候我们怎么算出符合题意的矩阵的个数呢?
其实很简单——对于每行,我们可以在前面n-1列任意放置一个小于等于x的数,而第n列总有唯一合法的填数方案。
同理对于每一列也是一样的,所以我们可以得出合法的矩阵的总个数就是(x+1)的(n-1)*(m-1)次方
下面贴代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f
const ll N = 1e6+;
ll pow_mod(ll a, ll n, ll m)
{
a%=m;
long long ans = ;
while(n)
{
if(n&)
{
ans = (ans * a) % m;
}
a = (a * a) % m;
n >>= ;
}
return ans;
}
ll n,m,x,p;
ll a[N],b[N];
int main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
cin>>n>>m>>x>>p;
ll ans1,ans2;
for(ll i=; i<=n; i++)
{
cin>>a[i];
if(i == )
ans1 = a[i];
else
ans1 = ans1^a[i];
}
for(ll i=; i<=m; i++)
{
cin>>b[i];
if(i == )
ans2 = b[i];
else
ans2 = ans2^b[i];
}
if(ans1^ans2)
{
cout<<<<endl;
continue;
} ll ans = pow_mod(x+,(n-)*(m-),p);
cout<<ans<<endl;
}
return ;
}
第二题bit树调bug调了三十分钟测试样例还是没过,所以果断暴力取30分。
暴力完第二题已经快11点了,此时心态已崩。想着11点就可以和小伙伴们去
吃饭,直接写个特判拿了5分
以后题解多了会把这两题也补上,目前就这样...
牛客NOIP暑期七天营-提高组3的更多相关文章
- 牛客NOIP暑期七天营-提高组1
牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子. 但是边权不为0 除了第一个有0的不行. x连向上一个比他小的数. 期间判断有无解. #include <bits/std ...
- 牛客NOIP暑期七天营-提高组6
目录 A-积木大赛 题目描述 link 题解 代码 B-破碎的序列 题目描述 link 题解 C-分班问题 题目描述 link 题解 比赛链接 官方题解 A-积木大赛 题目描述 link 题解 标签: ...
- 牛客NOIP暑期七天营-提高组5+普及组5
————提高组———— 第一题:deco的abs 题目链接:https://ac.nowcoder.com/acm/contest/934/A 因为每个数都可以加任意次 d ,所以可以推出 0 < ...
- 牛客NOIP暑期七天营-提高组2
第一题:ACGT 题目链接:https://ac.nowcoder.com/acm/contest/931/A trie树.hash.map遍历 ①.trie树上的节点多记一个rest值表示还有多少 ...
- 牛客NOIP暑期七天营-提高组6C:分班问题 (组合数)
题意:A班有N个人,B班有M个人,现在要组成一个新的班级C班,为了公平,从AB班各抽相同人数的人. 现在求所有方案中,人数之和是多少. 思路:即求Σ k*C(N,k)*C(M,k); 先忽略这个 ...
- 牛客NOIP暑期七天营-提高组5
A:deco的abs. 水题,先%,然后相邻两个数min()一下差值. #include<bits/stdc++.h> #define ll long long using namespa ...
- 牛客NOIP暑期七天营-提高组2C:滑块(平衡树) (这里rope骗分)
A:hash 或者 map 或者trie. #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) usin ...
- 牛客NOIP暑期七天营-提高组1 解题报告
https://ac.nowcoder.com/acm/contest/920#question A 构造+双指针 发现m的限制是1e5,而点数是5e4,所以不能构造太多的边,思考一下最短路树的定义. ...
- 牛客NOIP暑期七天营-普及组2D
链接:https://ac.nowcoder.com/acm/contest/926/D来源:牛客网 在一维坐标系中,给定 n条有颜色的线段,第 i条线段的左右端点分别为 li和 ri,此外它的颜 ...
随机推荐
- 将Swagger2文档导出为HTML或markdown等格式离线阅读
网上有很多<使用swagger2构建API文档>的文章,该文档是一个在线文档,需要使用HTTP访问.但是在我们日常使用swagger接口文档的时候,有的时候需要接口文档离线访问,如将文档导 ...
- 究极秒杀Loadrunner乱码
Loadrunner乱码一击必杀 之前有介绍一些简单的针对Loadrunner脚本或者调试输出内容中乱码的一些设置,但是并没能完全解决一些小伙伴的问题,因为那些设置实在能力有限,还是有很多做不到的事情 ...
- Gemini.Workflow 双子工作流高级教程:数据库-设计文档
数据库设计文档 数据库名:Workflow_New 序号 表名 说明 1 WF_Activity wf_Activity 2 WF_ActivityInstance wf_ActivityInstan ...
- JavaScript笔记七
1.函数 - 返回值,就是函数执行的结果. - 使用return 来设置函数的返回值. - 语法:return 值; - 该值就会成为函数的返回值,可以通过一个变量来接收返回值 - return后边的 ...
- C#笔记01——注释、进制、基本数据类型、量和输入输出函数
一.注释 1.单行注释 使用方法:行首加 ” //“: VS2019中的快捷键(以后如果不特加说明都是VS2019): 注释(CTRL+E,C): 取消注释(CTRL+E,U): 2.多行注释 使用方 ...
- Python爬虫之Selenium的常用方法
1.单个元素的选取 find_element_by_id 通过标签属性Id查找元素 find_element_by_name 通过标签属性name查找元素 find_element ...
- 2019年12月2日Linux开发手记
开始学习在Linux下视频源捕获驱动框架,也就是V4L2(video4linux),本次关于v4l2的知识准备主要在于其的官方例程,理解官方例程也就差不多掌握了v4l2的基本内容.例程在:http:/ ...
- P2415 集合求和(一道洛谷好题鸭)(虽然可以水过,但有必研究DP)
此题坑点: 结果必须要用long long存,int存不下 如果想要像cout<<sum*pow(2,num-1)这样在输出时计算会错:long long在计算过程被隐式转换成了doubl ...
- 【开发记录】Linux常用命令记录(一)【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- Xcode9 脚本打包报错
Xcode9 脚本编译报错 xcodebuild -exportArchive fails with error Locating signing assets failed X9的exporto ...