Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Author: 曹北健(37509)
- Result: AC Submission_id: 4204005
- Created at: Mon Mar 21 2022 11:08:38 GMT+0800 (China Standard Time)
- Problem: 5416 Time: 259 Memory: 2044
- */
- #include <stdio.h>
- unsigned int a[114514] = { 0 };
- void reverse_array_u32(unsigned int *arr, int l, int r){
- int i = l, j = r, t;
- while(i < j){
- t = arr[i];arr[i] = arr[j];arr[j] = t;
- i++;j--;
- }
- }
- void array_rotate_left_u32(unsigned int *arr, int n, int k){
- reverse_array_u32(arr, 0, k - 1);
- reverse_array_u32(arr, k, n - 1);
- reverse_array_u32(arr, 0, n - 1);
- }
- void array_rotate_right_u32(unsigned int *arr, int n, int k){
- reverse_array_u32(arr, 0, n - 1);
- reverse_array_u32(arr, 0, k - 1);
- reverse_array_u32(arr, k, n - 1);
- }
- int main(){
- int n, i, k, tmp, bittomove, numtomove;
- char dir[5] = { 0 };
- unsigned int t, b0;
- while(~scanf("%d", &n)){
- for(i = 0;i < n;i++){
- scanf("%d", &tmp);
- a[i] = (unsigned int)tmp;
- }
- scanf("%s%d", dir, &t);
- bittomove = t % 32;
- numtomove = (t / 32) % n;
- if(dir[0] == 'l'){
- if(bittomove){
- b0 = a[0] >> (32 - bittomove);
- for(k = 0;k < n - 1;k++){
- a[k] = (a[k] << bittomove) | (a[k + 1] >> (32 - bittomove));
- }
- a[n - 1] = a[n - 1] << bittomove | b0;
- }
- array_rotate_left_u32(a, n, numtomove);
- }
- else{
- if(bittomove){
- b0 = a[n - 1] & ((1 << bittomove) - 1);
- for(k = n - 1;k > 0;k--){
- a[k] = (a[k] >> bittomove) | ((a[k - 1] & ((1 << bittomove) - 1)) << (32 - bittomove));
- }
- a[0] = (a[0] >> bittomove) | (b0 << (32 - bittomove));
- }
- array_rotate_right_u32(a, n, numtomove);
- }
- for(i = 0;i < n;i++){
- printf("%d ", (int)(a[i]));
- }
- putchar('\n');
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement