题目大意:有
n
(
2
∣
n
)
n(2|n)
n(2∣n)个人围成一个圈,每个人编号分别为
1
,
2
,
3...
n
1,2,3...n
1,2,3...n,第
x
x
x个人正对面的人是第
y
y
y个人,给出
x
,
y
x,y
x,y,问第
z
z
z个人所对的人的编号是多少,无解输出
−
1
-1
−1。
分析:
观察两个人何时能相对,设
s
1
s_1
s1为
x
,
y
x,y
x,y左边间隔的人,设
s
2
s_2
s2为
x
,
y
x,y
x,y右边间隔的人,发现当且仅当
s
1
=
s
2
s_1=s_2
s1=s2时,
x
,
y
x,y
x,y是相当的
所以令
a
=
m
i
n
(
x
,
y
)
,
b
=
m
a
x
(
x
,
y
)
a=min(x,y),b=max(x,y)
a=min(x,y),b=max(x,y),那么
s
2
=
y
−
x
−
1
s_2=y-x-1
s2=y−x−1,
s
1
=
s
2
s_1=s_2
s1=s2,但明显
s
1
s_1
s1至少为
1
1
1~
x
−
1
x-1
x−1的人数,所以
s
1
⩾
x
−
1
s_1\geqslant x-1
s1⩾x−1,如果
s
2
<
x
−
1
s_2<x-1
s2<x−1那么就是无解
通过
s
1
s_1
s1,
s
2
s_2
s2,容易求出
n
=
s
1
+
s
2
+
2
n=s_1+s_2+2
n=s1+s2+2,如果
z
>
n
z>n
z>n也是无解
最后根据
s
2
s_2
s2可以得出于
z
z
z相对的人的位置在
(
z
+
s
2
)
(z+s_2)
(z+s2)的位置上,
%
\%
%一下就好了
所以把其分成
n
n
n段向下,和向左移动的子段,发现
(
n
,
1
)
=
k
2
(n,1)=k^2
(n,1)=k2,所以可以知道
(
x
)
2
=
(
x
的
上
一
个
平
方
数
)
(\sqrt x)^2=(x的上一个平方数)
(x)2=(x的上一个平方数),于是就得到了
x
x
x是从
(
x
,
1
)
(\sqrt x,1)
(x,1)开始往下的
x
−
x
2
x-\sqrt x ^2
x−x2的数所填充的位置
题目大意:给出
x
x
x,每次可以删除
x
x
x的任意一位,或在
x
x
x末尾添一个数字,问使得
x
=
2
k
(
k
⩾
0
)
x=2^k(k\geqslant 0)
x=2k(k⩾0)的最少次数
分析:
考虑极端情况,
x
x
x有
9
9
9位,删
9
9
9位在加上
1
1
1位
2
2
2,那
x
x
x必然合法,所以最多操作
10
10
10次,所以
x
⩽
1
0
19
x\leqslant 10^{19}
x⩽1019,所以枚举
k
=
1
到
63
k=1到63
k=1到63,选取最小操作方案
这样,问题就变为了给两个数
a
,
b
a,b
a,b,问是的
a
a
a,变成
b
b
b的最小操作次数,举个例子
1052
1052
1052变成
1024
1024
1024,因为我们是可以在末尾添加,而不能在首位添加,所以要使得高位相等的代价要高于使低位相等的代价,所以就要尽量使高位相等,从高位开始匹配即可,余下的位数要剪掉
题目大意:原来有一串字符
s
s
s,每次删除其中一种字母,直到为空串,设每次删除后的字符串为
s
1
,
s
2
.
.
.
s
k
s_1,s_2...s_k
s1,s2...sk,则字符串
t
=
s
+
s
1
+
s
2
+
.
.
.
+
s
k
t=s+s_1+s_2+...+s_k
t=s+s1+s2+...+sk,现在给出
t
t
t,问原字符串
s
s
s是啥,以及字母删除的顺序。
分析:
首先可以发现,如果在一个位置
m
i
d
mid
mid上,
1
1
1 ~
m
i
d
mid
mid中字符
G
G
G出现了,但在
m
i
d
+
1
mid+1
mid+1 ~
t
.
l
e
n
g
t
h
(
)
t.length()
t.length()中没有出现,则可以断定
G
G
G被删除了,从开头枚举到结尾,就可以得到删除的顺序了
那么如何求出
s
s
s呢?观察
t
t
t的构成,
t
=
s
+
s
1
+
s
2
+
.
.
.
+
s
k
t=s+s_1+s_2+...+s_k
t=s+s1+s2+...+sk,那么根据每个字母删除的顺序,我们可以得到,在
t
t
t中,每个字母出现了
S
在
s
中
出
现
的
次
数
∗
T
第
几
个
删
除
的
S_{在s中出现的次数}*T_{第几个删除的}
S在s中出现的次数∗T第几个删除的,因为
s
s
s是
t
t
t的开头,枚举结尾在哪,利用前缀和判断是否合法即可