喵哈哈村的魔法考试 Round #20 (Div.2) 题解
题解:
A 喵哈哈村的跳棋比赛
题解:其实我们要理解题意就好了,画画图看看这个题意。x<y,那么就交换;x>y,那么x=x%y。
如果我们经过很多次,或者y<=0了,那么就会无限循环。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long x,y;
void work(){
while(1){
if(x==0){
cout<<y<<endl;
break;
}
if(x<y)swap(x,y);
if(x==0){
cout<<y<<endl;
break;
}
if((y<=0)&&(x>y)){
cout<<"N/A\n";
break;
}
x%=y;
}
}
int main(){
while(cin>>x>>y)work();
return 0;
}
喵哈哈村的扔骰子大赛
题解:暴力dfs就可以,dfs(i,j),i是当前扔到第j个骰子,j表示当前和的组合,我们把组合用状态压缩表示一下。你本地打表其实也可以
代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int ans=0;
inline int Gcd(int a,int b){return b?Gcd(b,(a%b)):a;}
void go(int v,long long lop){
if(v>n){
if(lop&((long long)1<<(long long)m)) ans++;
return;
}
for(int i=1;i<=6;i++)
go(v+1,lop|(lop<<i));
}
int main(){
scanf("%d%d",&n,&m);
go(1,1);
int d=1;
for(int i=1;i<=n;i++)d*=6;
if(ans==0) printf("0\n");
else if(ans==d) printf("1\n");
else{
int gc=Gcd(ans,d);
printf("%d/%d",ans/gc,d/gc);
}
}
喵哈哈村的魔方大赛
题解:最多转两次,暴力模拟一下吧
#include <iostream>
#include <algorithm>
using namespace std;
int F(char f)
{
switch(f)
{
case 'U':
return 0;
case 'D':
return 1;
case 'L':
return 2;
case 'R':
return 3;
case 'F':
return 4;
case 'B':
return 5;
}
}
int k[9][6] = {
{0, 1, 5, 4, 2, 3},
{0, 1, 3, 2, 5, 4},
{0, 1, 4, 5, 3, 2},
{5, 4, 2, 3, 0, 1},
{1, 0, 2, 3, 5, 4},
{4, 5, 2, 3, 1, 0},
{3, 2, 0, 1, 4, 5},
{1, 0, 3, 2, 4, 5},
{2, 3, 1, 0, 4, 5}
};
int main()
{
int n, x1, y1, z1, x2, y2, z2, fa1, fa2;
char f1, f2;
cin >> n >> x1 >> y1 >> z1 >> f1 >> x2 >> y2 >> z2 >> f2;
fa1 = F(f1);
fa2 = F(f2);
if (x1 == x2 && y1 == y2 && z1 == z2 && fa1 == fa2)
cout << 0;
else if (
x1 == z2 && y1 == y2 && z1 == n + 1 - x2 && fa1 == k[0][fa2] ||
x1 == n + 1 - x2 && y1 == y2 && z1 == n + 1 - z2 && fa1 == k[1][fa2] ||
x1 == n + 1 - z2 && y1 == y2 && z1 == x2 && fa1 == k[2][fa2] ||
x1 == x2 && y1 == n + 1 - z2 && z1 == y2 && fa1 == k[3][fa2] ||
x1 == x2 && y1 == n + 1 - y2 && z1 == n + 1 - z2 && fa1 == k[4][fa2] ||
x1 == x2 && y1 == z2 && z1 == n + 1 - y2 && fa1 == k[5][fa2] ||
x1 == y2 && y1 == n + 1 - x2 && z1 == z2 && fa1 == k[6][fa2] ||
x1 == n + 1 - x2 && y1 == n + 1 - y2 && z1 == z2 && fa1 == k[7][fa2] ||
x1 == n + 1 - y2 && y1 == x2 && z1 == z2 && fa1 == k[8][fa2]
)
cout << 1;
else
{
if (x1 > (1 + n) / 2)
x1 = n + 1 - x1;
if (x2 > (1 + n) / 2)
x2 = n + 1 - x2;
if (y1 > (1 + n) / 2)
y1 = n + 1 - y1;
if (y2 > (1 + n) / 2)
y2 = n + 1 - y2;
if (z1 > (1 + n) / 2)
z1 = n + 1 - z1;
if (z2 > (1 + n) / 2)
z2 = n + 1 - z2;
if (x1 > y1)
swap(x1, y1);
if (x1 > z1)
swap(x1, z1);
if (y1 > z1)
swap(y1, z1);
if (x2 > y2)
swap(x2, y2);
if (x2 > z2)
swap(x2, z2);
if (y2 > z2)
swap(y2, z2);
if (x1 == x2 && y1 == y2 && z1 == z2)
cout << 2;
else
cout << -1;
}
return 0;
}
喵哈哈村的种树大赛
题解:简单的线段树的区间更新,区间求gcd的题。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,M;
int Tree[1048576<<2],tree[1048576];
inline int gcd(int x,int y)
{
x=x<0?-x:x; y=y<0?-y:y;
for (int r;y;r=x%y,x=y,y=r);
return x;
}
int main()
{
scanf("%d%d",&n,&m);
for(M=1;M<=n+1;M<<=1);
while(m--)
{
int opt;
scanf("%d",&opt);
if(opt==1)
{
int l,r,t;
scanf("%d%d%d",&l,&r,&t);
for(int x=l;x<=n;x+=x&(-x))tree[x]+=t;
for(int x=r+1;x<=n;x+=x&(-x))tree[x]-=t;
Tree[l+=M]+=t;
for(int x=(l>>1);x;x>>=1)Tree[x]=gcd(Tree[x<<1],Tree[(x<<1)|1]);
Tree[r+=M+1]-=t;
for(int x=(r>>1);x;x>>=1)Tree[x]=gcd(Tree[x<<1],Tree[(x<<1)|1]);
}else
{
int l,r;
scanf("%d%d",&l,&r);
int ret=0,tmp=0;
for(int x=l+M,y=r+M+1;x^y^1;x>>=1,y>>=1)
{
if(!(x&1))ret=gcd(ret,Tree[x^1]);
if(y&1)ret=gcd(ret,Tree[y^1]);
}
for(int x=l;x;x-=x&(-x))tmp+=tree[x];
ret=gcd(ret,tmp);
printf("%d\n",ret);
}
}
}
喵哈哈村的玩手机大赛
题解:最大流,A-手机-B就好了,但是暴力连图是会挂的,所以我们倍增优化一下连接的正方形就好(x
代码:
#include<cstdio>
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
const int N=56010,inf=~0U>>2;
int n,S,T,h[N],gap[N],maxflow;
struct edge{int t,f;edge *nxt,*pair;}*g[N],*d[N];
int r,c,a,b,x1,x2,y1,y2,w;
int i,j,k,fs[62][62][6],ft[62][62][6],pow[8],log[62];
inline int min(int a,int b){return a<b?a:b;}
inline void add(int s,int t,int f){
edge *p=new(edge);p->t=t;p->f=f;p->nxt=g[s];g[s]=p;
p=new(edge);p->t=s;p->f=0;p->nxt=g[t];
g[t]=p;g[s]->pair=g[t];g[t]->pair=g[s];
}
int sap(int v,int flow){
if(v==T)return flow;
int rec=0;
for(edge *p=d[v];p;p=p->nxt)if(h[v]==h[p->t]+1&&p->f){
int ret=sap(p->t,min(flow-rec,p->f));
p->f-=ret;p->pair->f+=ret;d[v]=p;
if((rec+=ret)==flow)return flow;
}
d[v]=g[v];
if(!(--gap[h[v]]))h[S]=T;
gap[++h[v]]++;
return rec;
}
int main(){
for(pow[0]=i=1;i<8;i++)pow[i]=pow[i-1]<<1;
for(i=1;i<62;i++)for(j=i;j>1;j>>=1,log[i]++);
read(r);read(c);read(a);read(b);
for(i=1;i<=r;i++)for(j=1;j<=c;j++){
fs[i][j][0]=++n,ft[i][j][0]=++n;
read(k);
add(fs[i][j][0],ft[i][j][0],k);
}
for(k=1;k<6;k++)for(i=1;i<=r;i++)for(j=1;j<=c;j++)if(i+pow[k]-1<=r&&j+pow[k]-1<=c){
fs[i][j][k]=++n,ft[i][j][k]=++n;
add(fs[i][j][k],fs[i][j][k-1],inf),add(ft[i][j][k-1],ft[i][j][k],inf);
add(fs[i][j][k],fs[i+pow[k-1]][j][k-1],inf),add(ft[i+pow[k-1]][j][k-1],ft[i][j][k],inf);
add(fs[i][j][k],fs[i][j+pow[k-1]][k-1],inf),add(ft[i][j+pow[k-1]][k-1],ft[i][j][k],inf);
add(fs[i][j][k],fs[i+pow[k-1]][j+pow[k-1]][k-1],inf),add(ft[i+pow[k-1]][j+pow[k-1]][k-1],ft[i][j][k],inf);
}
S=n+a+b+1;T=S+1;
while(a--){
read(w),read(x1),read(y1),read(x2),read(y2);
add(S,i=++n,w);
k=log[j=x2-x1+1];
add(i,fs[x1][y1][k],inf);
add(i,fs[x1][y2-pow[k]+1][k],inf);
add(i,fs[x2-pow[k]+1][y1][k],inf);
add(i,fs[x2-pow[k]+1][y2-pow[k]+1][k],inf);
}
while(b--){
read(w),read(x1),read(y1),read(x2),read(y2);
add(i=++n,T,w);
k=log[j=x2-x1+1];
add(ft[x1][y1][k],i,inf);
add(ft[x1][y2-pow[k]+1][k],i,inf);
add(ft[x2-pow[k]+1][y1][k],i,inf);
add(ft[x2-pow[k]+1][y2-pow[k]+1][k],i,inf);
}
gap[0]=T;
for(i=0;i++<T;)d[i]=g[i];
while(h[S]<T)maxflow+=sap(S,inf);
printf("%d",maxflow);
return 0;
}
喵哈哈村的魔法考试 Round #20 (Div.2) 题解的更多相关文章
- 喵哈哈村的魔法考试 Round #2 (Div.2) 题解
喵哈哈村的魔法考试 Round #2 (Div.2) 题解 A.喵哈哈村的战争 题解: 这道题就是for一遍,统计每个村子的战斗力的和,然后统计哪个村子的战斗力和大一点就好了. 唯一的坑点,就是这道题 ...
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解
喵哈哈村的魔法考试 Round #1 (Div.2) 题解 特别感谢出题人,qscqesze. 也特别感谢测题人Xiper和CS_LYJ1997. 没有他们的付出,就不会有这场比赛. A 喵哈哈村的魔 ...
- 喵哈哈村的魔法考试 Round #7 (Div.2) 题解
喵哈哈村的魔法考试 Round #7 (Div.2) 注意!后四道题来自于周日的hihocoder offer收割赛第九场. 我建了个群:欢迎加入qscoj交流群,群号码:540667432 大概作为 ...
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)
A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05 最后更新: 2017年2月21日 20:06 时间限制: 1000ms 内存限制: 128M 描述 传说喵哈哈村有三种神 ...
- 喵哈哈村的魔法考试 Round #19 (Div.2) 题解
题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...
- 喵哈哈村的魔法考试 Round #14 (Div.2) 题解
喵哈哈村的四月半活动(一) 题解: 唯一的case,就是两边长度一样的时候,第三边只有一种情况. #include <iostream> #include <cstdio> # ...
- 喵哈哈村的魔法考试 Round #18 (Div.2) 题解
喵哈哈村的古怪石碑(一) 题解:暴力check一下是等比数列还是等差数列,然后输出答案即可.注意如果数据范围是1e9的话,就要快速幂了. 代码: #include <cstdio> #in ...
- 喵哈哈村的魔法考试 Round #4 (Div.2) 题解
有任何疑问,可以加我QQ:475517977进行讨论. A 喵哈哈村的嘟嘟熊魔法(1) 题解 这道题我们只要倒着来做就可以了,因为交换杯子是可逆的,我们倒着去模拟一遍就好了. 有个函数叫做swap(a ...
- 喵哈哈村的魔法考试 Round #13 (Div.2) 题解
喵哈哈村的木星传说(一) 旋转90°,找找规律就知道(x,y)->(n-1-y,x) 然后输出就好了. #include<bits/stdc++.h> using namespace ...
随机推荐
- Sql 正确删除用户过期的数据
怎样才算是正确的删除过期的数据呢?先交代一下前提,XX网站上面有一个放心企业专区,办理超级会员即可成为放心企业,放心企业可设置推荐职位展示在放心企业专区,信息都是存放在Info表中的,所谓的推荐职位就 ...
- javaScript——原型继承四步曲
<script> //js模拟类的创建以及继承 //第一步:创建父类 function Parent(name){ this.name = name; } //给父类添加属性方法 Pare ...
- centos7 部署 open-falcon 0.2.1
=============================================== 2019/4/28_第1次修改 ccb_warlock 更新 ...
- 服务端工程师入门与进阶 Java 版
前言 欢迎加入我们.这是一份针对实习生/毕业生的服务端开发入门与进阶指南.遇到问题及时问你的 mentor 或者直接问我. 建议: 尽量用google查找技术资料. 有问题在stackoverflow ...
- 基于GTID环境的数据恢复
下面说一个线上环境的数据恢复案例,线上环境误操作的事情,随时都有可能发生的,这时候运维DBA或者DBA会想,没人会傻到把数据库干掉的吧?又或者没有会闲得蛋痛删除了几条数据又想恢复这么无聊吧?适适这样的 ...
- 数据库中的null用法
- docker安装sonarqube及实际应用
由于平台的多样化,在不同环境的安装方式可能也不一样,为了避免环境不一致带来的差异,特记一笔容器安装: 一.Sonar可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题. 1. ...
- c3p0和QueryRunner的结合使用,让开发更加简便
1:DBUtils中的QueryRunner的使用: 1.1:QueryRunner中提供了对SQL语句操作的api: 1.2:主要有三个方法: 1.2.1:query():用于执行select(查询 ...
- centos6.5上安装配置telnet服务
https://blog.csdn.net/wx5040257/article/details/78327915
- Springboot实现热部署
所谓的热部署:比如项目的热部署,就是在应用程序在不停止的情况下,实现新的部署 而Springboot在我们每次修改完代码之后,可能只是修改下打印的信息,就得重新启动App类,这样太浪费时间,有没有一种 ...