CSP考了依托答辩,准备复习一下。

ACwing题目还有做题为主要内容。

3.22

快排

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

inline int read() {
	char c = getchar();
	int x = 0, f = 1;
	for ( ; !isdigit(c); c = getchar()) if (c == '-') f = -1;
	for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
	return x * f;
}

int a[1000011];

void qsort(int l, int r) {
	if (l >= r) return;
	int x = a[l + r >> 1];
	int i = l - 1, j = r + 1;
	while (i < j) {
		while (a[++i] < x);
		while (a[--j] > x);
		if (i < j) swap(a[i], a[j]);
	}
	qsort(l, j);
	qsort(j + 1, r);
}

int main() {
	int n = read();
	for (int i = 1; i <= n; i++) a[i] = read();
	qsort(1, n);
	for (int i = 1; i <= n; i++) cout << a[i] << " ";
	puts("");
	return 0;
}

3.23

线性筛素数

#include <stdio.h>

const int A = 1e6 + 11;
const int B = 5e5 + 11;

int vis[A];
int n, q, pri[B], cnt;

int main() {
  scanf("%d", &n);
  vis[0] = 1, vis[1] = 1;
  for (int i = 2; i <= n; i++) {
  	if (!vis[i]) pri[++cnt] = i;
  	for (int j = 1; j <= cnt && i * pri[j] <= n; j++) {
  		vis[i * pri[j]] = 1;
  		if (i % pri[j] == 0) break;
		}
	}
	for (int i = 1; i < cnt; i++) {
		if (pri[i + 1] - pri[i] == 2) printf("(%d,%d) ", pri[i], pri[i + 1]); 
	}
  return 0;
}

转载不必联系作者,但请声明出处