求助70分

P1571 眼红的Medusa

#include <cstdio> #include <algorithm> #include <iostream> #include <cmath> long long found[100002], sum = 0, l, r, goal; int kp2(int a[], int l, int r) { int k = rand()%(r-l+1)+l; int s; std::swap(a[l], a[k]); float temp = a[l]; int i = l + 1, j = r; while (1) { while (a[i] < temp && i <= r) { i++; } while (a[j] > temp && j >= l + 1) { j--; } if (i > j) break; std::swap(a[i], a[j]); i++; j--; } std::swap(a[l], a[j]); return j; } void kp1(int a[], int l, int r) { if (l >= r) return; int num = kp2(a, l, r); kp1(a, l, num-1); kp1(a, num+1, r); } void twofen(int b[], int l, int r, int goal) { if (l > r) { return; } int mid = (l + r)/2; if (b[mid] == goal) { sum ++; found[sum] = goal; } if (b[mid] < goal) twofen(b, mid+1, r, goal); if (b[mid] > goal) twofen(b, l, mid-1, goal); } using namespace std; int main() { /* 课时:第三课 3. (扩展,洛谷 P 1 5 7 1) 题目:眼红的 Medusa 预计用时:20 分钟 实际用时:50 分钟 */ int n, m; int a[102000], b[102000], min1[101000], ji[101000] = { 0 }; scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } for (int i = 0; i < m; i++) { scanf("%d", &b[i]); } kp1(b, 0, m-1); l = 0; r = m - 1; for (int i = 0; i < n; i++) { twofen(b, l, r, a[i]); } for (int i = 1; i <= sum; i++) { printf("%d ", found[i]); } return 0; }
by Jack_cjj2 @ 2019-01-31 16:48:06


天啊这字体咋弄
by Jack_cjj2 @ 2019-01-31 16:48:31


```cpp #include <cstdio> #include <algorithm> #include <iostream> #include <cmath> long long found[100002], sum = 0, l, r, goal; int kp2(int a[], int l, int r) { int k = rand()%(r-l+1)+l; int s; std::swap(a[l], a[k]); float temp = a[l]; int i = l + 1, j = r; while (1) { while (a[i] < temp && i <= r) { i++; } while (a[j] > temp && j >= l + 1) { j--; } if (i > j) break; std::swap(a[i], a[j]); i++; j--; } std::swap(a[l], a[j]); return j; } void kp1(int a[], int l, int r) { if (l >= r) return; int num = kp2(a, l, r); kp1(a, l, num-1); kp1(a, num+1, r); } void twofen(int b[], int l, int r, int goal) { if (l > r) { return; } int mid = (l + r)/2; if (b[mid] == goal) { sum ++; found[sum] = goal; } if (b[mid] < goal) twofen(b, mid+1, r, goal); if (b[mid] > goal) twofen(b, l, mid-1, goal); } using namespace std; int main() { /* 课时:第三课 3. (扩展,洛谷 P 1 5 7 1) 题目:眼红的 Medusa 预计用时:20 分钟 实际用时:50 分钟 */ int n, m; int a[102000], b[102000], min1[101000], ji[101000] = { 0 }; scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } for (int i = 0; i < m; i++) { scanf("%d", &b[i]); } kp1(b, 0, m-1); l = 0; r = m - 1; for (int i = 0; i < n; i++) { twofen(b, l, r, a[i]); } for (int i = 1; i <= sum; i++) { printf("%d ", found[i]); } return 0; } ```
by Jack_cjj2 @ 2019-01-31 16:49:01


|