Submission #73265153
Source Code Expand
Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#include <stdlib.h>
struct card_s {
int start, num;
struct card_s* next;
};
struct cardinfo_s {
struct card_s *first, *last;
};
struct carddivide_s {
struct cardinfo_s a, b, c;
};
struct card_s* createCard(int start, int num) {
struct card_s* card = malloc(sizeof(*card));
if (card == NULL) exit(2);
card->start = start;
card->num = num;
card->next = NULL;
return card;
}
void divide2(struct cardinfo_s* a, struct cardinfo_s* b, struct card_s* cards, int x) {
struct card_s** prev, *prevSrc = NULL;
a->first = cards;
a->last = NULL;
b->first = NULL;
b->last = NULL;
prev = &a->first;
while (*prev != NULL) {
if ((*prev)->num <= x) {
x -= (*prev)->num;
prevSrc = *prev;
prev = &(*prev)->next;
} else if (x == 0) {
a->last = prevSrc;
if (prevSrc == NULL) a->first = NULL;
b->first = *prev;
if (a->last != NULL) a->last->next = NULL;
break;
} else {
struct card_s* newNode1 = createCard((*prev)->start, x);
struct card_s* newNode2 = createCard((*prev)->start + x, (*prev)->num - x);
newNode2->next = (*prev)->next;
free(*prev);
*prev = newNode1;
a->last = newNode1;
b->first = newNode2;
break;
}
}
b->last = b->first;
if (b->last != NULL) {
while (b->last->next != NULL) b->last = b->last->next;
}
}
struct carddivide_s divide(struct card_s* cards, int x, int y) {
struct carddivide_s result;
if (x == 0) {
result.a.first = NULL;
result.a.last = NULL;
divide2(&result.b, &result.c, cards, y);
} else {
divide2(&result.a, &result.b, cards, x);
divide2(&result.b, &result.c, result.b.first, y - x);
}
return result;
}
int n;
int m;
int p, q, r;
int x[5123], y[5123];
int main(void) {
int i;
struct card_s* cards;
struct carddivide_s finalCards;
int ans = 0;
if (scanf("%d", &n) != 1) return 1;
if (scanf("%d", &m) != 1) return 1;
if (scanf("%d%d%d", &p, &q, &r) != 3) return 1;
for (i = 0; i < m; i++) {
if (scanf("%d%d", &x[i], &y[i]) != 2) return 1;
}
cards = createCard(1, n);
for (i = 0; i < m; i++) {
struct carddivide_s splitted = divide(cards, x[i], y[i]);
splitted.c.last->next = splitted.b.first;
splitted.b.last->next = splitted.a.first;
cards = splitted.c.first;
}
finalCards = divide(cards, p - 1, q);
for (cards = finalCards.b.first; cards != NULL; cards = cards->next) {
if (cards->start <= r) {
int num = cards->num;
int num2 = r - cards->start + 1;
ans += num <= num2 ? num : num2;
}
}
printf("%d\n", ans);
return 0;
}
Submission Info
| Submission Time |
|
| Task |
E - シャッフル |
| User |
mikecat |
| Language |
C23 (GCC 14.2.0) |
| Score |
100 |
| Code Size |
2598 Byte |
| Status |
AC |
| Exec Time |
121 ms |
| Memory |
1920 KiB |
Judge Result
| Set Name |
set01 |
set02 |
set03 |
set04 |
set05 |
| Score / Max Score |
20 / 20 |
20 / 20 |
20 / 20 |
20 / 20 |
20 / 20 |
| Status |
|
|
|
|
|
| Set Name |
Test Cases |
| set01 |
data1 |
| set02 |
data2 |
| set03 |
data3 |
| set04 |
data4 |
| set05 |
data5 |
| Case Name |
Status |
Exec Time |
Memory |
| data1 |
AC |
1 ms |
1712 KiB |
| data2 |
AC |
1 ms |
1664 KiB |
| data3 |
AC |
116 ms |
1756 KiB |
| data4 |
AC |
118 ms |
1920 KiB |
| data5 |
AC |
121 ms |
1760 KiB |