[FZYZOJ 2162] Zrn神犇之折纸游戏

2024-02-25 05:10

本文主要是介绍[FZYZOJ 2162] Zrn神犇之折纸游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

P2162 -- Zrn神犇之折纸游戏

时间限制:2000MS

内存限制:524288KB

Description

Zrn神犇最近喜欢上一款折纸游戏,因此他几乎每天都拿着一条悠长悠长又寂寥的纸带折来折去。其具体规则是这样的:

这是一个长度为N,宽度为1的纸条,从1开始写着连续的N个自然数。

 

123456N

如果它的长度为偶数,Zrn神犇则会很高兴,直接把它从左往右或从右往左对折。比如长度为6的纸条从左往右对折完就会是这样:

如果它的长度为质数,Zrn神犇则会觉得不太爽,他就只能把最左端的往右折或把最右端的往左折。比如长度为5的纸条从右往左折完会变成这样:

如果它的长度是合数,Zrn神犇则会找到它最小的质因数k,把它分成相同长度的k段,按折长度为k的纸条的方法处理。

Zrn神犇就一遍又一遍地按着这个方法折,最后把这个纸条折成了一个叠在一起的小方块。

下面演示长度为15,对折和长度为质数时均从右往左折的纸条的折法:(描述可能不大清楚,请见谅)

(长度为15)

(长度为10)

(长度为5)

(长度为4)

(长度为2)

(长度为1,目标状态)

Input Format

三个数n,p1,p2,n为纸条的长度,若p1=1,对折时从左往右折,若p1=2,对折时从右往左折;若p2=1,长度为质数时折最左端,若p2=2,长度为质数时折最右端。

Output Format

N行,每行一个整数,为1~n的一个排列,表示目标状态从上到下纸片的编号。

Sample Input

15 2 2

Sample Output

2
12
9
8
13
3
4
14
7
6
15
5
10
11
1

Hint

对于20%的数据,n≤40;

对于50%的数据,n≤1000;

对于100%的数据,n≤5000000。

 

【题解】本来一看模拟,被数据范围吓傻了

然后经过了WZT、CYX大聚聚的教导

终于明白了-这是一题双链表。

然后就按照题目操作一下

憋了半个多小时,发现素因子被我筛错了……

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAX=5000010;
 4 int n,p1,p2,pr[MAX],head[MAX],next[MAX][2];
 5 int bgn,end,len;
 6 int main() {
 7     scanf("%d%d%d",&n,&p1,&p2);
 8     // p[i]: i的最大素数因子
 9     // 如果i为素数,那么p[i]=i; 反之成立 
10     for (int i=2;i<=n;++i)
11         if (pr[i]==0) {
12             pr[i]=i;
13             for (int j=i*2;j<=n;j+=i)
14                 if(pr[j]==0)pr[j]=i;
15         }
16     bgn=1;end=len=n;
17     for (int i=1;i<=n;++i)
18         head[i]=i, next[i][0]=next[i][1]=0;
19     while(len!=1) {
20         int sxbk=len/pr[len];
21         if (len&1?p2==1:p1==1) {
22             for (int j=bgn+sxbk-1,k=bgn+sxbk;j>=bgn;--j,++k) {
23                 next[head[k]][k&1]=head[j];
24                 next[head[j]][j&1]=head[k];
25                 head[k]=j;
26             }
27             bgn+=sxbk;
28         }
29         else {
30             for (int j=end-sxbk+1,k=end-sxbk;j<=end;++j,--k) {
31                 next[head[k]][k&1]=head[j];
32                 next[head[j]][j&1]=head[k];
33                 head[k]=j;
34             }
35             end-=sxbk;
36         }
37         len-=sxbk;
38     }
39     for (int i=head[bgn];i;i=next[i][head[bgn]&1]) 
40         printf("%d\n",i);
41     return 0;
42 }
View Code

 

转载于:https://www.cnblogs.com/TonyNeal/p/fzyzoj2162.html

这篇关于[FZYZOJ 2162] Zrn神犇之折纸游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

第四次北漂----挣个独立游戏的素材钱

第四次北漂,在智联招聘上,有个小公司主动和我联系。面试了下,决定入职了,osg/osgearth的。月薪两万一。 大跌眼镜的是,我入职后,第一天的工作内容就是接手他的工作,三天后他就离职了。 我之所以考虑入职,是因为 1,该公司有恒歌科技的freex平台源码,可以学学,对以前不懂的解解惑。 2,挣点素材钱,看看张亮002的视频,他用了6000多,在虚幻商城买的吸血鬼游戏相关的素材,可以玩两年。我

nyoj 1038 纸牌游戏

poj 的一道改编题,说是翻译题更恰当,因为只是小幅度改动。 一道模拟题,代码掌控能力比较好,思维逻辑清晰的话就能AC。 代码如下: #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{char c[5];int rk;char da[5];int nu

如果出一个名叫白神话悟空的游戏

最近黑神话由于与原著不符引起了原著派的争议。 所以我在摸鱼的时候想到如果游科或者某个别的公司“痛改前非”不夹带私货完全复刻吴承恩百回版剧情制作一个“重走西游路”的游戏,会有一个什么样的销量?(设定为原著派已经多方渠道认证,此游戏的确没有夹带私货,绝大部分复刻了原著剧情) 游戏玩法我想了几类 超长线性有岔路蜈蚣形状地图,蜈蚣的腿部是探索区域和支线,重走西游路线,开篇就是开始取经前唐玄宗御弟cg

《黑暗之魂2:原罪学者》是什么类型的游戏 《黑暗之魂》可以在苹果Mac电脑上玩吗?

在宏大的世界观游戏中,《黑暗之魂2:原罪学者》脱颖而出,以其探索性和挑战性征服了全球玩家的心灵。下面我们来看看《黑暗之魂2:原罪学者》是什么类型的游戏,《黑暗之魂2:原罪学者》可以在苹果电脑玩吗的相关内容。 一、《黑暗之魂2:原罪学者》是什么类型的游戏 《黑暗之魂2:原罪学者》作为《黑暗之魂2》的增强版和重制版,是一款FromSoftware制作、BANDAI NAMCO和FromSoft

简单取石子游戏~博弈

很坑爹的小游戏,至于怎么坑爹,嘎嘎~自己研究去吧~! #include<stdio.h>#include<windows.h>#include<iostream>#include<string.h>#include<time.h>using namespace std;void Loc(int x,int y);/*定位光标*/void Welcome(); /*创建欢迎界面*/

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

Unity3D在2D游戏中获取触屏物体的方法

我们的需求是: 假如屏幕中一个棋盘,每个棋子是button构成的,我们希望手指或者鼠标在哪里,就显示那个位置的button信息。 网上有很多获取触屏物体信息的信息的方法如下面代码所示: Camera cam = Camera.main; // pre-defined...if (touch.phase == TouchPhase.Bagan)){ // 如果触控点状态为按下Ray