PKU Online Judge 1054

2024-05-14 12:08
文章标签 online 1054 pku judge

本文主要是介绍PKU Online Judge 1054,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1054:Cube

  • 查看
  • 提交
  • 统计
  • 提问
总时间限制: 
1000ms 
内存限制: 
131072kB
描述

Delayyy君很喜欢玩某个由Picks编写的方块游戏,游戏在一个由单位格组成的棋盘上进行。

游戏的主角是一个6个面互不相同的小方块,每次可以向上下左右中的某个方向翻滚一格。


棋盘上有 N 个关键格子,对应于游戏中的村庄,在坐标系中,每个村庄有一个坐标位置 (x,y) (任意两个村庄位置不相等)。

先前的方块村民已经修好了 N-1 条道路(高架桥、地下隧道等,即不能从一条道路走上另一条道路)使这 N 个村庄连通,并且由于方块民族的习俗,每条道路都平行于坐标轴。

主角小方块打算选两个村庄 S 、 T ,沿最短路进行一次 S 到 T 的旅行。

但由于方块民族的特殊属性,小方块一次旅行终止时必须和开始时的状态(即六个面的朝向)完全一致。

Delayyy君想知道,从每个村庄出发,主角小方块能选出多少个可行的旅行终点。


数据范围


输入
一个测试点中有多组数据(不超过10组)。对于每组数据:

第一行一个整数:N。

接下来 N 行中的第 i 行中有两个整数:x[i], y[i],表示第 i 个关键格子(即村庄)的位置。

再接着 N-1 行,每行两个数:u, v,表示第 u 个关键格子和第 v 个关键格子之间有边。保证 x[u]=x[v] 或 y[u]=y[v]。
输出
对于每组数据:

输出共 N 行。

第 i 行表示从第 i 个关键格子开始滚动符合要求的方案数。
样例输入
1
1 1
3
1 1
1 2
5 1
1 2
1 3
样例输出
0
1
0
1
提示
对于第二个样例,仅有在1,3号关键格子中滚动时不会改变状态。
题目是一棵树,但是,我们只要找一边下去,就可以确定每一种的状态,这样就可以马上,把每个点的壮态,确定下来,最后,直接输出来就可以了,这样,就可以用线性的时间,得出结果了!
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define M 100050
#define E 1000000
#define mem(a,b) memset(a,b,sizeof(a))
struct node {int x,y,fx,fy,fz;
}p[M];
int head[M],next[E],edge_m,vec[E],ans[8][8][8];
int addedge(int s,int e){next[edge_m]=head[s],vec[edge_m]=e,head[s]=edge_m++;next[edge_m]=head[e],vec[edge_m]=s,head[e]=edge_m++;return 0;
}
int dfs(int now,int pre,int x,int y,int z){p[now].fx=x,p[now].fy=y,p[now].fz=z;ans[x][y][z]++;for(int i=head[now];i!=-1;i=next[i]){int g=vec[i];if(g!=pre){int tx=x,ty=y,tz=z,mx,my,mz;if(p[g].x!=p[now].x){int step=p[g].x-p[now].x;if(step>0){ty=y;step=step%4;for(;step;step--){mx=tx,mz=tz;tz=mx,tx=7-mz;}dfs(g,now,tx,ty,tz);}else {ty=y;step=(-step)%4;for(;step;step--){mx=tx,mz=tz;tz=7-mx,tx=mz;}dfs(g,now,tx,ty,tz);}}else {int step=p[g].y-p[now].y;if(step>0){tz=z;step=step%4;for(;step;step--){mx=tx,my=ty;ty=mx,tx=7-my;}dfs(g,now,tx,ty,tz);}else {tz=z;step=(-step)%4;for(;step;step--){mx=tx,my=ty;ty=7-mx,tx=my;}dfs(g,now,tx,ty,tz);}}}}return 0;
}
int main()
{int n,i,u,v;while(scanf("%d",&n)!=EOF){edge_m=0;mem(head,-1);mem(ans,0);for(i=1;i<=n;i++)scanf("%d%d",&p[i].x,&p[i].y);for(i=1;i<n;i++){scanf("%d%d",&u,&v);addedge(u,v);}dfs(1,-1,1,2,3);for(i=1;i<=n;i++)printf("%d\n",ans[p[i].fx][p[i].fy][p[i].fz]-1);}return 0;
}


这篇关于PKU Online Judge 1054的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988712

相关文章

【漏洞复现】锐捷 校园网自助服务系统 login_judge.jsf 任意文件读取漏洞

免责声明:         本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测试时,可能会违反某些法律法规或服务协议。同时,未经授权地访问系统、网络或应用程序可能导致法律责任或其他严重后果。作者不对读者基于本文内容而产生的任何行为或后果承担

[LeetCode] 901. Online Stock Span

题:https://leetcode.com/problems/online-stock-span/ 题目大意 不断给出元素,求当前元素开始往前的最大子串,且串中每个元素的值都小于等于 该元素。 思路 class stockPair{int price;int day;public stockPair(int price,int day){this.price = price;this.d

HDU 5444 Elven Postman (2015 ACM/ICPC Asia Regional Changchun Online)

【题目链接】:click here~~ 【题目大意】: HDU 5444 题意:在最初为空的二叉树中不断的插入n个数。对于每个数,从根节点开始判断,如果当前节点为空,就插入当前节点,如果当前节点不为空,则小于当前节点的值,插入右子树,否则插入左子树。 接着q次询问,每次询问一个值在二叉树中从根节点开始的查找路径。 3 直接用二叉树模拟整个插入和询问的过程 代码:

Coder-Strike 2014 - Finals (online edition, Div. 1) C. Bug in Code

水题一道,但是卡了一个早上 我本着数据结构去做的,知道用树状数组就是没有想出来维护的方法.... 用树状数组维护,提名 i 次的人有getsum个 注意一点的是,如果怀疑的人是 1 2,然后有一个人是同时提名这两个的,那么这个人就会被算两次 因此我每次用树状数组统计的时候,将同时和第i个人提名的各个人数减1,再统计,然后再恢复(这是一种很麻烦的做法,我是渣渣别介意 #include

Bubble Cup 8 - Finals [Online Mirror] - A.Fibonotci【分段+ST表】

因为  si s_i为近似周期序列,而且告诉你了 m m个位置以及数字。 那么就将序列分成mm段,每一段用一个ST表来维护区间矩阵乘积 然后注意一些细节,比如 m <script type="math/tex" id="MathJax-Element-259">m</script>段分段如果两个不周期位置连续,以及最后一个段等等。 想法还是比价明显的,但是确实不好写…. #include<

codeforces-Coder-Strike 2014 - Finals (online edition, Div. 2)

A. Pasha and Hamsters 模拟 #include <stdio.h>#include <string.h>int l1[101];int l2[101];int main(){memset(l1,0,sizeof (l1));memset(l2,0,sizeof (l2));int n,a,b,i,t;scanf ("%d%d%d",&n,&a,&b);for (i =

Exchange Online P1 AO Sub Add-on to User Exchange Std 部署方案建议

目录 引言 一、Exchange Online P1、AO Sub Add-on 与 Exchange Standard 简介 1.1 Exchange Online P1 1.2 AO Sub Add-on 1.3 Exchange Standard 二、Exchange Online P1 AO Sub Add-on 的主要功能 2.1 高级安全性 2.2 增强的合规性

Deep Sort目标跟踪论文梗概SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC

DeepSort是跟踪算法中非常好用的一个,速度快,准度高。 本文为CVPR2017的跟踪算法。 论文:https://arxiv.org/pdf/1703.07402.pdf 代码:https://github.com/nwojke/deep_sort 摘要 简单在线和实时跟踪Simple Online and Realtime Tracking (SORT)是一种注重简单、高效的多目标跟踪

POJ 1054 暴力搜索

在一个矩阵方格里面,青蛙在里面跳,但是青蛙每一步都是等长的跳,从一个边界外,跳到了另一边的边界外,每跳一次对那个点进行标记。 现在给你很多青蛙跳过后的所标记的所有点,那请你从这些点里面找出一条路径里面出现过的标记点最多。 1、 要考虑的只能是路径里面标记点大于3的路径 2、 是从边界外跳进,并且最后要跳出边界外。 先把所有点排序,然后每两点做一条直线搜索

Aeron:Online Resources

Aeron Wiki 是一个极好的资源,由 Aeron 团队随时更新。 一、Conference Videos Martin Thomson introducing Aeron, Strange Loop, 2014 https://youtu.be/tM4YskS94b0 Todd Montgomery discussing the next steps for Aeron, Go