P5944 出圈游戏 题解
1.Fair Warning2.CSES1081:Common Divisors3.P3951 小凯的疑惑4.SGU 140 题解5.CF1579F 题解
6.P5944 出圈游戏 题解
7.P2480 古代猪文 题解8.P4774 屠龙勇士 题解9.P4139 上帝与集合的正确用法 题解10.P1463 反质数11.P3182 放棋子12.线性代数基础和矩阵树定理13.OGF 学习笔记14.EGF 学习笔记15.FFT 与 NTT 学习笔记16.多项式全家桶17.CF392C Yes Another Number Sequence18.FFT 优化常系数齐次线性递推式19.普通/下降幂多项式平移20.普通多项式、连续点值、下降幂多项式的关系21.P1891 疯狂 LCM22.FMT 与 FWT23.集合幂级数与子集卷积看一个人什么时候出圈没有用。先求一个数组
考虑第
也就是
于是得到了
点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
inline long long read()
{
long long x=0,f=1;
char ch;
while(ch>'9'||ch<'0')
{
if(ch=='-')f=-1;
ch=getchar();
}
while('0'<=ch&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
inline void write(long long x)
{
if(x<0)putchar('-'),x=-x;
if(x>=10)write(x/10);
putchar(x%10+'0');
}
typedef pair<long long, long long> pii;
queue<pii> q;
void exgcd(long long a, long long b, long long &x, long long &y) {
if (b == 0) {
x = 1, y = 0;
return ;
}
exgcd(b, a % b, x, y);
long long x0 = x, y0 = y;
x = y0;
y = x0 - (a / b) * y0;
return ;
}
long long gcd(long long a, long long b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
long long lcm(long long a, long long b) {
return a * b / gcd(a, b);
}
void chk() {
pii f1 = q.front();
q.pop();
pii f2 = q.front();
q.pop();
long long p1 = f1.first, m1 = f1.second, p2 = f2.first, m2 = f2.second;
// write(p1);
// putchar(' ');
// write(m1);
// putchar(' ');
// write(p2);
// putchar(' ');
// write(m2);
// putchar('\n');
if ((p2 - p1) % gcd(m1, m2) != 0) {
cout << "NIE\n";
exit(0);
}
long long g = gcd(m1, m2), A, B;
exgcd(m1 / g, m2 / g, A, B);
long long t = (p1 + (p2 - p1) / g * A * m1 % lcm(m1, m2)) % lcm(m1, m2);
if (t >= 0)
q.push(make_pair(t, lcm(m1, m2)));
else {
t += lcm(m1, m2);
q.push(make_pair(t, lcm(m1, m2)));
}
}
int n;
int rk[N], id[N];
long long a[N], b[N];
bool out[N] = {};
int nxt(int x) {
if (x == n)
return 1;
return x + 1;
}
int main() {
// freopen("1.in", "r", stdin);
// freopen("1.out", "w", stdout);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> rk[i];
id[rk[i]] = i;
}
for (int i = 1, p = 0; i < n; i++) {
int cnt = 0;
while (p != id[i]) {
p = nxt(p);
if (!out[p])
cnt++;
}
out[p] = true;
a[i] = cnt % (n - i + 1), b[i] = n - i + 1;
// write(a[i]);
// putchar(' ');
// write(b[i]);
// putchar('\n');
}
for (int i = 1; i < n; i++)
q.push(make_pair(a[i], b[i]));
for (int i = 1; i < n - 1; i++)
chk();
if (q.front().first == 0)
write(q.front().second);
else
write(q.front().first);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!