PAT 1067 Sort with Swap(0,*)
2014-11-20 00:19
375 查看
#include <cstdio> #include <cstdlib> #include <vector> using namespace std; int swap(vector<int> &numpos, int va, int vb) { //printf("swap(%d at %d, %d at %d)\n", va, numpos[va], vb, numpos[vb]); int pa = numpos[va]; int pb = numpos[vb]; numpos[va] = pb; numpos[vb] = pa; } int pick_first_mismatch_value(vector<int> &numpos, int start) { int i = start; int len = numpos.size(); while (i < len) { if (numpos[i] != i) { return i; } i++; } return -1; } int main() { int N; scanf("%d", &N); vector<int> numpos(N); int value; for (int i=0; i<N; i++) { scanf("%d", &value); numpos[value] = i; } int step = 0; int b = 0; for (;;) { if (numpos[0] == 0) { b = pick_first_mismatch_value(numpos, b); if (b <= 0) { break; } swap(numpos, 0, b); step++; continue; } swap(numpos, 0, numpos[0]); step++; } printf("%d", step); return 0; }
相关文章推荐
- PAT (Advanced Level) Practise 1067 Sort with Swap(0,*) (25)
- PAT 甲级 1067. Sort with Swap(0,*) (25)
- PAT1067 Sort with Swap(0,*)
- pat 1067 Sort with Swap(0,*) (25)
- pat1067 Sort with Swap(0,*)
- PAT 1067 Sort with Swap(0,*)
- PAT 1067. Sort with Swap(0,*) (25) 整数0到整数N-1的交换排序问题
- PAT 1067. Sort with Swap(0,*) (25) 思路简单,优化麻烦
- PAT (Advanced Level) 1067. Sort with Swap(0,*) (25) 只能与0交换
- PAT_1067. Sort with Swap(0,*)
- 【PAT】1067. Sort with Swap(0,*)
- PAT 1067. Sort with Swap(0,*)
- PAT - 甲级 - 1067. Sort with Swap(0,*) (25)(模拟+贪心)
- PAT 1067. Sort with Swap(0,*) (25)(交换同一个数字给数列排序)
- 【PAT】1067. Sort with Swap(0,*) (25)
- PAT 1067. Sort with Swap(0,*) (25)
- PAT|1067. Sort with Swap(0,*)
- PAT-1067 Sort with Swap(0,*)
- 【PAT】【Advanced Level】1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25) PAT甲级