喵哈哈村的秘境探险系列。

A.

实际上就是求乘积%k是否等于0,显然 a * b % k = (a%k)*(b%k)%k,所以边乘边取模就好了。

#include<bits/stdc++.h>
using namespace std; int main(){
long long n,k;
while(cin>>n>>k){
long long now = 1;
for(int i=0;i<n;i++){
long long x;
cin>>x;
now = now * x % k;
}
if(now == 0)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}

B.

异或是可以前缀和的,因为x^x=0,所以 答案就是sum[r]^sum[l-1]

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
int q,sum[maxn],n,a[maxn]; int main(){
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
while(cin>>n){
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
sum[i]=a[i]^sum[i-1];
cin>>q;
while(q--){
int x,y;
cin>>x>>y;
cout<<(sum[y]^sum[x-1])<<endl;
}
}
}

C

不修改,是滑雪的经典题,就是一个记忆化搜搜。

第一个修改操作是O(1),剩下的每次O(n2)修改,然后O(n2)跑DP就好。。

#include <bits/stdc++.h>
using namespace std;
const int dx[]={0,0,1,-1};
const int dy[]={1,-1,0,0};
int f[705][705],mark[705][705],m[705][705];
int n;
int S(int x,int y){
if(mark[x][y])return 0;
if(f[x][y])return f[x][y];
f[x][y]=1;
for(int i=0;i<4;++i){
int _x=x+dx[i],_y=y+dy[i];
if(_x>n||_y>n||_x<1||_y<1)continue;
if(m[_x][_y]>=m[x][y])continue;
f[x][y]=max(f[x][y],S(_x,_y)+1);
}
return f[x][y];
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j){
scanf("%d",&m[i][j]);
}
char opt[2];
int m2,q,w,e,r;
scanf("%d",&m2);
for(int i=1;i<=m2;++i){
scanf("%s",opt);
if(opt[0]=='C'){
scanf("%d%d%d",&q,&w,&e);
m[q][w]=e;
}
else if(opt[0]=='S'){
scanf("%d%d%d%d",&q,&w,&e,&r);
for(int i=q;i<=e;++i)
for(int j=w;j<=r;++j)
mark[i][j]=1;
}
else if(opt[0]=='B'){
scanf("%d%d%d%d",&q,&w,&e,&r);
for(int i=q;i<=e;++i)
for(int j=w;j<=r;++j)
mark[i][j]=0;
}
else {
int ans=0;
memset(f,0,sizeof(f));
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j){
ans=max(ans,S(i,j));
}
printf("%d\n",ans);
}
} return 0;
}

D

算法其实很简单,我们以二进制为10111001这个数为例

原数为:

10111001

如果我们不取第一个1,那么后面7位我们可以随意取:

0*******

如果我们取第一个,不取第二个,那么后面5位我们可以随意取:

100*****

以此类推……

这样一来,我们就不受原数n的限定了,对于*部分,我们只需用组合数算出放1个1,放2个1,放3个1……的种数(记得加上前面已经确定的数位)

这样以来,我们也就知道了每种1的个数对应数的总数,题中是为了求乘积,那么快速幂即可

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
const int L_N=65;
const LL MOD=10000007;
LL f[L_N][L_N][2],NUM;
int val[L_N],len; LL pow(int d,LL k){
if(k==0) return 1;
LL t=pow(d,k/2);
t=t*t%MOD;
if(k%2) t=t*d%MOD;
return t;
} int main(){
scanf("%lld",&NUM); while(NUM){
val[++len]=NUM&1;
NUM>>=1;
}
reverse(val+1,val+1+len); f[0][0][1]=1;
for(int i=1;i<=len;i++){
for(int j=0;j<=i;j++){
f[i][j][0]+=f[i-1][j][0];
if(val[i]) f[i][j][0]+=f[i-1][j][1];
if(!val[i]) f[i][j][1]+=f[i-1][j][1]; if(j){
f[i][j][0]+=f[i-1][j-1][0];
if(val[i]) f[i][j][1]+=f[i-1][j-1][1];
}
}
} LL ans=1;
for(int i=1;i<L_N;i++){
LL d=f[len][i][0]+f[len][i][1];
ans=(ans*pow(i,d))%MOD;
} printf("%lld\n",ans); return 0;
}

E

树状数组/线段树来维护每个数的和,便于快速查询sum

更新的话,就直接暴力更新即可,因为每个数最多更新log(n)次就会到达1或者0

然后我们用并查集维护一下,如果更新到了1,就指向下一个需要更新的值就好了,直接跳过该值。

#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
LL a[100005],c[100005];
int f[100005],n,m,op,l,r,t;
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
int update(int x,LL num){while(x<=n)c[x]+=num,x+=(x&-x);}
LL sum(int x){LL s=0;while(x)s+=c[x],x-=(x&-x);return s;}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)f[i]=i,scanf("%lld",&a[i]),update(i,a[i]);
scanf("%d",&m); f[n+1]=n+1;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&op,&l,&r);
if(l>r)swap(l,r);
if(op==1)printf("%lld\n",(sum(r)-sum(l-1)));
else for(int j=l;j<=r;update(j,(t=(int)sqrt(a[j]))-a[j]),a[j]=t,
f[j]=(a[j]<=1)?j+1:j,j=(find(j)==j?j+1:f[j]));
}
return 0;
}

喵哈哈村的魔法考试 Round #17 题解的更多相关文章

  1. 喵哈哈村的魔法考试 Round #7 (Div.2) 题解

    喵哈哈村的魔法考试 Round #7 (Div.2) 注意!后四道题来自于周日的hihocoder offer收割赛第九场. 我建了个群:欢迎加入qscoj交流群,群号码:540667432 大概作为 ...

  2. 喵哈哈村的魔法考试 Round #2 (Div.2) 题解

    喵哈哈村的魔法考试 Round #2 (Div.2) 题解 A.喵哈哈村的战争 题解: 这道题就是for一遍,统计每个村子的战斗力的和,然后统计哪个村子的战斗力和大一点就好了. 唯一的坑点,就是这道题 ...

  3. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解

    喵哈哈村的魔法考试 Round #1 (Div.2) 题解 特别感谢出题人,qscqesze. 也特别感谢测题人Xiper和CS_LYJ1997. 没有他们的付出,就不会有这场比赛. A 喵哈哈村的魔 ...

  4. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)

    A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05   最后更新: 2017年2月21日 20:06   时间限制: 1000ms   内存限制: 128M 描述 传说喵哈哈村有三种神 ...

  5. 喵哈哈村的魔法考试 Round #19 (Div.2) 题解

    题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...

  6. 喵哈哈村的魔法考试 Round #1 (Div.2)

    比赛地址:http://qscoj.cn/contest/2/ 都是中文题,这里不在详述题意 A.喵哈哈村的魔法石 分析:暴力求解 #include<iostream> #include& ...

  7. 喵哈哈村的魔法考试 Round #1 (Div.2) ABCD

    官方题解: http://www.cnblogs.com/qscqesze/p/6418555.html#3623453 喵哈哈村的魔法石 描述 传说喵哈哈村有三种神奇的魔法石:第一种魔法石叫做人铁石 ...

  8. 喵哈哈村的魔法考试 Round #14 (Div.2) 题解

    喵哈哈村的四月半活动(一) 题解: 唯一的case,就是两边长度一样的时候,第三边只有一种情况. #include <iostream> #include <cstdio> # ...

  9. 喵哈哈村的魔法考试 Round #4 (Div.2) 题解

    有任何疑问,可以加我QQ:475517977进行讨论. A 喵哈哈村的嘟嘟熊魔法(1) 题解 这道题我们只要倒着来做就可以了,因为交换杯子是可逆的,我们倒着去模拟一遍就好了. 有个函数叫做swap(a ...

随机推荐

  1. day1 diff命令递归比较目录下的文件

    一.diff实战 (1)递归比较文件夹下所有的文件及目录的不同 diff --brief -Nr dir1/ dir2/                               Reference ...

  2. CentOS 6.5 rsync+inotify实现数据实时同步备份

    CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync    remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...

  3. PYTHON-模块 logging hashlib

    '''import logging # 1. 控制日志级别# 2. 控制日志格式# 3. 控制输出的目标为文件logging.basicConfig(filename='access.log', fo ...

  4. node 相关网站

    包管理网站:https://www.npmjs.com/

  5. Pycharm4.5注册码 激活

    name : newasp ===== LICENSE BEGIN ===== 09086-12042010 00001EBwqd8wkmP2FM34Z05iXch1Ak KI0bAod8jkIffy ...

  6. Deep Learning系统实训之三:卷积神经网络

    边界填充(padding):卷积过程中,越靠近图片中间位置的像素点越容易被卷积计算多次,越靠近边缘的像素点被卷积计算的次数越少,填充就是为了使原来边缘像素点的位置变得相对靠近中部,而我们又不想让填充的 ...

  7. java 运算符 与(&)、非(~)、或(|)、异或(^)逻辑操作符 与(&&) 或(||) 非(!)

    按位与&: 只要对应的二个二进位都为1时,结果位就为1 按位或|:只要对应的二个二进位有一个为1时,结果位就为1 按位异或^:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1) ...

  8. web----框架基础

    Web框架本质: 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 真实开发中的python web程序来说,一般会分为两部分:服务器 ...

  9. MySQL索引底层实现原理

    优秀博文: MySQL索引背后的数据结构及算法原理 B树.B-树.B+树.B*树[转],mysql索引 MySQL 和 B 树的那些事 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮 ...

  10. Linux学习笔记:ftp中binary二进制与ascii传输模式的区别

    在使用ftp传输文件时,常添加上一句: binary  -- 使用二进制模式传输文件 遂查资料,如下所获. FTP可用多种格式传输文件,通常由系统决定,大多数Linux/UNIX系统只有两种模式:文本 ...