50097. Conveyor Belt

難度:4/5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include "transmission.h"
#define MAXSIZE 1048576

static inline void reverse(long long arr[], int l, int r){
while(l < r){
long long temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
l++, r--;
}
}

static inline int left_shift(long long arr[], int s, int n){
s %= n;
reverse(arr, 0, s - 1);
reverse(arr, s, n - 1);
reverse(arr, 0, n - 1);
}

static inline void bit_shift(long long arr[], int t, int n){
long long mask = (((long long)1 << t) - 1);

long long carry = (arr[0] >> (64 - t)) & mask;
for(int i = n - 1; i >= 0; i--){
long long t_carry = (arr[i] >> (64 - t)) & mask;
arr[i] = (arr[i] << t) | (carry);
carry = t_carry;
}
}


void transmission(long long int belt[], int n, int t){
left_shift(belt, t / 64, n);
bit_shift(belt, t % 64, n);
}


50097. Conveyor Belt
https://aaronlin1229.github.io/judgegirl_50097/
Author
Akizumi
Posted on
July 17, 2023
Licensed under