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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | #include <iostream> #include <string> #include <sstream> #include <cstring> using namespace std; void question1(int[], int, int); void question2(int[], int, int, int); void question3(int[], int); void question4(int[], int); void compareSize(int[], int, int); int target[300001]; int tempArray[300001]; int workList[300000][4]; int setSize; int question_count; ostringstream worldString; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin >> setSize >> question_count; for (int z = 0; z <= setSize; ++z) { target[z] = z; } memcpy(target, target + 1, sizeof(int) * setSize); for (int i = 0; i < question_count; ++i) { cin >> workList[i][0]; switch (workList[i][0]) { case 1: cin >> workList[i][1] >> workList[i][2]; break; case 2: cin >> workList[i][1] >> workList[i][2] >> workList[i][3]; break; case 3: cin >> workList[i][1]; break; case 4: cin >> workList[i][1]; break; default: break; } } for (int j = 0; j < question_count; ++j) { switch (workList[j][0]) { case 1: question1(target, workList[j][1], workList[j][2]); break; case 2: question2(target, workList[j][1], workList[j][2], workList[j][3]); break; case 3: question3(target, workList[j][1]); break; case 4: question4(target, workList[j][1]); break; default: break; } } worldString << target[0]; for (int v = 1; v < setSize; ++v) { worldString << " " << target[v]; } cout << worldString.str() << endl; } void question1(int targetArray[], int start, int end) { int head = start - 1; int r_size = end - head; for (int i = 0; i < r_size; ++i) { tempArray[i] = targetArray[head + i]; } int tail = end - 1; for (int j = 0; j < r_size; ++j) { targetArray[tail - j] = tempArray[j]; } compareSize(targetArray, start, end); } void question2(int targetArray[], int start, int end, int pos) { int head = start - 1; if (pos >= 0) { int pos_size = pos; int mid_pos = end - pos_size; for (int i = head; i < mid_pos; ++i) { tempArray[i - head] = targetArray[i]; } for (int a0 = 0; a0 < pos_size; ++a0) { targetArray[head + a0] = targetArray[mid_pos + a0]; } int gap = head + pos_size; for (int a1 = gap; a1 < end; ++a1) { targetArray[a1] = tempArray[a1 - gap]; } } else { int pos_size = pos * -1; int mid_pos = head + pos_size; for (int i = head; i < mid_pos; ++i) { tempArray[i - head] = targetArray[i]; } int gap = end - pos_size; for (int a0 = head; a0 < gap; ++a0) { targetArray[a0] = targetArray[a0 + pos_size]; } for (int a1 = gap; a1 < end; a1++) { targetArray[a1] = tempArray[a1 - gap]; } } compareSize(targetArray, start, end); } void compareSize(int targetArray[], int start, int end) { int head = start - 1; int* first_p = &targetArray[head]; int gap = end - head; int min = *first_p; int max = *first_p; int sum = *first_p; for (int i = 1; i < gap; ++i) { if (*(first_p + i) < min) { min = *(first_p + i); } else if (*(first_p + i) > max) { max = *(first_p + i); } sum += *(first_p + i); } worldString << min << " " << max << " " << sum << "\n"; } void question3(int targetArray[], int index) { int* first_p = &targetArray[0]; worldString << *(first_p + (index - 1)) << "\n"; } void question4(int targetArray[], int value) { int* first_p = &targetArray[0]; int pos = 0; for (int i = 0; i < setSize; ++i) { pos++; if (*(first_p + i) == value) { worldString << pos << "\n"; break; } } } | cs |
C++ 코드인데 여기서 뭘 더 어캐 할수있는지 아무리 생각해도 모르겠음...
아 이거 할시간에 플러터나 더 파는게 200배 이득인듯