codeforces 949B :A Leapfrog in the Array 找规律

题意:

现在给你一个n,表示有2*n-1个方格,第奇数方格上会有一个数字 1-n按顺序放。第偶数个方格上是没有数字的。变动规则是排在最后一个位置的数字,移动到它前边最近的空位 。 直到数字之间没有空位。之后有q次询问。每次问你这个位置上的数是多少

题解:

1:  1
 2:  1 2
 3:  1 3 2
 4:  1 3 2 4
 5:  1 5 2 4 3
 6:  1 4 2 6 3 5
 7:  1 6 2 5 3 7 4
 8:  1 5 2 7 3 6 4 8
 9:  1 9 2 6 3 8 4 7 5
10:  1 6 2 10 3 7 4 9 5 8
11:  1 9 2 7 3 11 4 8 5 10 6
12:  1 7 2 10 3 8 4 12 5 9 6 11
13:  1 12 2 8 3 11 4 9 5 13 6 10 7
14:  1 8 2 13 3 9 4 12 5 10 6 14 7 11
15:  1 12 2 9 3 14 4 10 5 13 6 11 7 15 8
16:  1 9 2 13 3 10 4 15 5 11 6 14 7 12 8 16
17:  1 17 2 10 3 14 4 11 5 16 6 12 7 15 8 13 9
规律一、每一行第一个数都是1
规律二、每一行奇数位置(设这个奇数位置为x)的数,都是确定的大小的。它的值就是2*x-1
规律三、每一行从第三个数开始到这一行倒数第二个数(闭区间,设为[a3,a4....a(n-1)]),对应着上一行的
        [a1+1,a2+1....a(n-3)+1]
规律四、每一行第二个数是上一行的最后一个数加1

1、如果题目询问的位置是奇数,就直接打印出2*x-1

2、如果题目询问的位置偶数(设这个位置为x),那就让这个位置减去2(如果这个位置是2,那就把x变成上一行末尾那个位置),在对应的上一行找结果。一直向上一行移动。直到x变成奇数

代码:

 1 #include<cstdio>
 2
 3 #include<cstring>
 4
 5 #define LL long long
 6
 7 using namespace std;
 8
 9 int main()
10
11 {
12
13     int p;
14
15     LL n,m,a;
16
17     scanf("%lld%d",&n,&p);
18
19     while(p--)
20
21     {
22
23         scanf("%lld",&a);
24
25         if(a%2==1)
26
27         {
28
29             printf("%lld\n",a/2+1);
30
31             continue;
32
33         }
34
35         m=n;
36
37         while(a%2==0)
38
39         {
40
41             a=m-a/2;
42
43             m=a;
44
45         }
46
47         printf("%lld\n",n-a+(a+1)/2);
48
49     }
50
51 }

原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/12011237.html

时间: 2024-11-02 22:07:23

codeforces 949B :A Leapfrog in the Array 找规律的相关文章

Codeforces 950D A Leapfrog in the Array ( 思维 &amp;&amp; 模拟 )

题意 : 给出 N 表示有标号 1~N 的 N 个数,然后从下标 1 开始将这 N 个数每隔一位放置一个,直到 N 个数被安排完,现在有一个操作就是每次将数列中最右边的数向离其左边最近的空缺处填上,一直这样子填,直到下标 1~N 被填满,然后现在给出 Q 个询问,每个询问给出一个 X ,你需要回答下标为 X 的位置填放了什么数? 分析 :   初始状态每个数都处于奇数位,且可以根据位置下标得到具体的数是什么,即 num = (pos>>1)  + 1 观察到当最后填充操作完成时,每个奇数位置的

Codeforces 57C Array dp暴力找规律

题目链接:点击打开链接 先是计算非递增的方案, 若非递增的方案数为x, 则非递减的方案数也是x 答案就是 2*x - n 只需求得x即可. 可以先写个n3的dp,然后发现规律是 C(n-1, 2*n-1) 然后套个逆元即可. #include<iostream> #include<cstdio> #include<vector> #include<string.h> using namespace std; #define ll long long #def

Codeforces Gym 100114 A. Hanoi tower 找规律

A. Hanoi tower Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Description you the conditions of this task. There are 3 pivots: A, B, C. Initially, n disks of different diameter are placed on the pivot A: the smallest dis

Codeforces 837E Vasya&#39;s Function 数论 找规律

题意:定义F(a,0) = 0,F(a,b) = 1 + F(a,b - GCD(a,b).给定 x 和 y (<=1e12)求F(x,y). 题解:a=A*GCD(a,b) b=B*GCD(a,b),那么b-GCD(a,b) = (B-1)*GCD(a,b),如果此时A和B-1依然互质,那么GCD不变下一次还是要执行b-GCD(a,b).那么GCD什么时候才会变化呢?就是说找到一个最小的S,使得(B-S)%T=0其中T是a的任意一个因子.变形得到:B%T=S于是我们知道S=min(B%T).也

找规律/贪心 Codeforces Round #310 (Div. 2) A. Case of the Zeros and Ones

题目传送门 1 /* 2 找规律/贪心:ans = n - 01匹配的总数,水 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <cstring> 8 #include <cmath> 9 using namespace std; 10 11 const int MAXN = 2e5 + 10; 12 const int INF =

找规律 Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks

题目传送门 1 /* 2 找规律,水 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <cstring> 8 #include <cmath> 9 using namespace std; 10 11 const int MAXN = 1e4 + 10; 12 const int INF = 0x3f3f3f3f; 13 char s

Codeforces Round #242 (Div. 2)C(找规律,异或运算)

一看就是找规律的题.只要熟悉异或的性质,可以秒杀. 为了防止忘记异或的规则,可以把异或理解为半加运算:其运算法则相当于不带进位的二进制加法. 一些性质如下: 交换律: 结合律: 恒等律: 归零律: 典型应用:交换a和b的值:a=a^b^(b=a); #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<

【博弈论】【SG函数】【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) E. Game of Stones

打表找规律即可. 1,1,2,2,2,3,3,3,3,4,4,4,4,4... 注意打表的时候,sg值不只与剩下的石子数有关,也和之前取走的方案有关. //#include<cstdio> //#include<set> //#include<cstring> //using namespace std; //bool vis[16]; //int n,SG[16][1<<16]; //int sg(int x,int moved) //{ // if(SG

Codeforces Round #204 (Div. 2)——A找规律——Jeff and Digits

Jeff's got n cards, each card contains either digit 0, or digit 5. Jeff can choose several cards and put them in a line so that he gets some number. What is the largest possible number divisible by 90 Jeff can make from the cards he's got? Jeff must