gpt4 book ai didi

c - “Fun with Rotation” - Codechef 九月长期挑战赛

转载 作者:行者123 更新时间:2023-11-30 20:26:28 24 4
gpt4 key购买 nike

这个答案有什么问题吗?请帮助我

问题是:给定一个包含 N 个整数的数组 A。您要完成 M 个查询。每个查询都具有以下三种类型之一:C d :将数组 A 顺时针旋转 d 个单位。A d :将数组 A 逆时针旋转 d 个单位。R d :查询当前为数组 A 中第 d 个元素的值。输入

第一行包含两个数字 - 分别为 N 和 M。下一行包含 N 个空格分隔的整数,表示数组 A。以下 M 行中的每一行都包含采用上述形式之一的查询。输出

对于每个 R 类型的查询,在单独的行上输出答案。约束

1 ≤ N ≤ 1000001≤M≤100000在所有查询中,1 ≤ d ≤ N1 ≤ A 的元素 ≤ 1000000数组 A 和类型 R 的查询都是从 1 开始的。

示例

输入:5 55 4 3 3 9R1碳4R 5A 3R 2输出:533

解决方案:

#include<stdio.h>
//#include<iostream>
//using namespace std;
int a[100001];
int index=0,n;

void clock(int);
void ant_clock(int);
void display(int);

int main()
{
unsigned int i,m;
char x;
int y;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
while(m--)
{
scanf(" %c%d",&x,&y);
if(1 <= y <= n)
{
if(x=='R')
display(y);
else if(x=='A')
ant_clock(y);
else if(x=='C')
clock(y);
}
else
return 0;
}
return 0;
}

void display(int y)
{
int j=index,x=0;
while(1)
{
if(x==y-1)
break;
j++;
x++;
if(j==n)
j=0;
}
printf("%d",a[j]);
}

void ant_clock(int y)
{
int j;
for(j=0;j<y;j++)
{
index--;
if(index==-1)
index=n-1;
}
}

void clock(int y)
{
int j;
for(j=0;j<y;j++)
{
index++;
if(index==n)
index=0;
}
}

最佳答案

查询索引从 1 开始似乎有问题。并且您的代码中有不必要的循环。

#include <stdio.h>

int arr[100000];

int main() {
int base = 0, size, i, m;
char x;
scanf("%d%d", &size, &m);
for (i = 0; i < size; i++)
scanf("%d", &arr[i]);
while (m-- > 0) {
scanf(" %c%d", &x, &i);
if (x == 'R') {
printf("%d\n", arr[(base + i - 1) % size]);
} else if (x == 'A') {
if ((base -= i) < 0)
base += size;
} else if (x == 'C') {
base = (base + i) % size;
}
}
return 0;
}

关于c - “Fun with Rotation” - Codechef 九月长期挑战赛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25827073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com