2410. Swapity Swap
题目描述
Farmer John 的 N 头奶牛(1≤N≤10^5)站成一排。对于每一个 1≤i≤N,从左往右数第 i 头奶牛的编号为 i。Farmer John 想到了一个新的奶牛晨练方案。他给奶牛们 M 对整数 (L1,R1)…(LM,RM),其中 1≤M≤100。他让她们重复以下包含 M 个步骤的过程 K(1≤K≤10^9)次:
对于从 1 到 M 的每一个步骤i:当前从左往右数在位置 Li…Ri 的奶牛序列反转她们的顺序。
当奶牛们重复这一过程 K 次后,请对每一个 1≤i≤N 输出从左往右数第 i 头奶牛的编号。
输入
输入的第一行包含 N, M 和 K。对于每一个 1≤i≤M,第 i+1 行包含 Li 和 Ri,均为范围在 1…N 内的整数,其中 Li<Ri。
输出
在第 i 行输出指令序列执行了 K 次后奶牛序列中从左往右数第 i 个元素的编号。
样例输入
7 2 2
2 5
3 7
样例输出
1
2
4
3
5
7
6
数据范围限制
测试点 1-2 满足 N=K=100。
测试点 3-5 满足 K≤10^3。
测试点 6-10 没有额外限制。
提示
初始时,奶牛们的顺序从左往右为 [1,2,3,4,5,6,7]。在这一过程的第一步过后,顺序变为 [1,5,4,3,2,6,7]。在这一过程的第二步过后,顺序变为 [1,5,7,6,2,3,4]。再重复这两个步骤各一次可以得到样例的输出。
方法一:
暴力,30%。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e5+5;
int f[N],l[110],r[110],n,m,k;
int main()
{
//fre(swap);
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++) f[i]=i;
for(int i=1;i<=m;i++) scanf("%d%d",&l[i],&r[i]);
while(k--)
for(int i=1;i<=m;i++)
for(int j=l[i];j<=(l[i]+r[i]-1)/2;j++) swap(f[j],f[l[i]+r[i]-j]);
for(int i=1;i<=n;i++) printf("%d\n",f[i]);
return 0;
}
方法二(快速幂优化):
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=100010;
int a[N],b[N],f[N],n,m,k;
int main()
{
//fre(swap);
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++) a[i]=i;
for(int i=1;i<=m;i++)
{
int l,r;
scanf("%d%d",&l,&r);
for(int j=l;j<=(l+r-1)/2;j++) swap(a[j],a[l+r-j]);
}
for(int i=1;i<=n;i++) f[i]=a[i],a[i]=i;
while(k>0)
{
if(k&1)
for(int i=1;i<=n;i++) a[i]=f[a[i]];
for(int i=1;i<=n;i++) b[i]=f[f[i]];
for(int i=1;i<=n;i++) f[i]=b[i];
k/=2;
}
for(int i=1;i<=n;i++) printf("%d\n",a[i]);
return 0;
}
题目描述了Farmer John的奶牛晨练方案,通过一系列位置的反转操作改变奶牛的顺序。给定奶牛数量N、反转操作对数M和重复次数K,求K次操作后的奶牛顺序。输入包括N, M, K以及M对反转区间,输出每个位置上的奶牛编号。"
113069531,10535817,Vue与ElementUI动态表单及子表单构建,"['前端开发', 'Vue框架', '表单组件', 'ElementUI']
463

被折叠的 条评论
为什么被折叠?



