13442-Luckymoney2
unknown
c_cpp
3 years ago
1.9 kB
8
Indexable
#include <stdio.h>
#include <stdlib.h>
typedef struct _Node
{
int number, age;
struct _Node *prev;
struct _Node *next;
} Node;
int cmp(const void *a, const void *b);
Node *head;
Node *coin_arr[5000001];
Node *createList(int n);
Node *solve(int n, int m);
Node *createList(int n)
{
Node *list = malloc(n * sizeof(Node));
for (int i = 0; i < n; ++i)
{
list[i].number = i + 1;
scanf("%d", &list[i].age);
coin_arr[i] = &list[i];
if (i != n - 1)
list[i].next = &list[i + 1];
else
list[i].next = &list[0];
if (i != 0)
list[i].prev = &list[i - 1];
else
list[i].prev = &list[n - 1];
}
qsort(coin_arr, n, sizeof(coin_arr[0]), cmp);
return list;
}
Node *solve(int n, int m)
{
for (int i = 0; i < m; ++i)
{
int a, k;
char dir;
scanf("%d %d %c", &a, &k, &dir);
k = k % (n - 1); //here i am confused
if (k == 0)
continue;
Node *cur = coin_arr[a - 1];
Node *next = coin_arr[a - 1]->next;
Node *prev = coin_arr[a - 1]->prev;
prev->next = next;
next->prev = prev;
if (dir == 'R')
{
while (k--)
{
prev = prev->next;
next = next->next;
}
}
else if (dir == 'L')
{
while (k--)
{
prev = prev->prev;
next = next->prev;
}
}
cur->prev = prev;
cur->next = next;
prev->next = cur;
next->prev = cur;
}
return coin_arr[0]; //here i am confused
}
int cmp(const void *a, const void *b)
{
Node *i = *(Node **)a;
Node *j = *(Node **)b;
if (i->age != j->age)
return i->age - j->age;
else
return i->number - j->number;
}Editor is loading...