Sorting a Three-Valued Sequence
来源:互联网 发布:qq农场软件 编辑:程序博客网 时间:2024/06/05 02:01
题意:给定一系列的1,2,3。求将原来的序列转换到正确的排序续要的最小交换次数
解题思路:
- 读入序列,得到1,2,3的个数,即可得到排序后的数组
- (实际在此位置的数,应该在此位置的数)这样的组合只有6种:(1,2)(2,1)(1,3)(3,1)(2,3)(3,2)
- 遍历一遍序列,可以得到上述六种组合的个数(A,a,B,b,C,c)
- 每一对(1,2)(2,1)这样的异常都可以通过仅仅1次移动得到解决。而(1,2)(2,3)(3,1)这样的异常组合可以通过2次移动得到解决。
- 求A,a二者的最小值(假设为a),将这个最小值加到最小交换次数中。并将a置0,A变为A-a。同理可以对B,b还有C,c进行处理。
- 最后剩下的组合必定是(1,2)(2,3)(3,1)或者是(2,1)(1,3)(3,2)。将这类组合的数量×2加到最小交换次数中。
- 输出最后得到的最小交换次数
代码:
/*ID: zc.rene1LANG: CPROG: sort3 */#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void){ FILE *fin, *fout; int* arr_in; int diff[6]; int N, num_of_1 = 0, num_of_2 = 0, num_of_3 = 0; int result = 0; int i; fin = fopen("sort3.in", "r"); fout = fopen("sort3.out", "w"); fscanf(fin, "%d", &N); arr_in = (int*)malloc(N*sizeof(int)); memset(arr_in, 0, N*sizeof(int)); memset(diff, 0, 6*sizeof(int)); for (i=0; i<N; i++) {fscanf(fin, "%d", &arr_in[i]); } for (i=0; i<N; i++) {if (arr_in[i] == 1){ num_of_1++;}else if (arr_in[i] == 2){ num_of_2++;}else{ num_of_3++;} } for (i=0; i<num_of_1; i++) {if (arr_in[i] == 2){ diff[1]++;}else if (arr_in[i] == 3){ diff[3]++;} } for (i=num_of_1; i<num_of_1+num_of_2; i++) {if (arr_in[i] == 1){ diff[0]++;}else if (arr_in[i] == 3){ diff[5]++;} } for (i=num_of_1+num_of_2; i<N; i++) {if (arr_in[i] == 1){ diff[2]++;}else if (arr_in[i] == 2){ diff[4]++;} } for (i=0; i<5; i+=2) {if( diff[i] <= diff[i+1]){ result += diff[i]; diff[i+1] -= diff[i]; diff[i] = 0;}else{ result += diff[i+1]; diff[i] -= diff[i+1]; diff[i+1] = 0;} } for (i=0; i<6; i++) {if (diff[i] != 0){ result += (2*diff[i]); break;} } fprintf(fout, "%d\n", result); return 0;}
- Sorting A Three-Valued Sequence
- Sorting a Three-Valued Sequence
- Sorting a Three-Valued Sequence
- Sorting A Three-Valued Sequence
- Sorting a Three-Valued Sequence
- Sorting a Three-Valued Sequence
- 2.1.4 Sorting A Three-Valued Sequence
- Section 2.1 Sorting A Three-Valued Sequence
- 2.1Sorting A Three-Valued Sequence
- usaco training-Sorting a Three-Valued Sequence
- usaco: Sorting a Three-Valued Sequence
- USACO Sorting A Three-Valued Sequence (sort3)
- usaco Sorting a Three-Valued Sequence
- usaco2.12Sorting a Three-Valued Sequence
- USACO-Sorting a Three-Valued Sequence
- 2.1.3---Sorting a Three-Valued Sequence
- USACO Sorting a Three-Valued Sequence
- USACO 2.1 Sorting a Three-Valued Sequence
- 使用ab对nginx进行压力测试
- json_value.asm: No such file or directory
- Android拍照,上传,预览综合【修改】
- C#的数据类型整数类型
- 给定一个正整数n,则在n所有的分解式中,求因子乘积最大的一个分解及此乘积。
- Sorting a Three-Valued Sequence
- 一个超级赖皮的数学证明方法——例证法
- MobileCloud for UFT
- OpenGLES阶段性总结
- char str[], const char str[], const char *str区别
- ubuntu 配置 android 开发环境
- InvokeHelper函数的用法
- 一道难题巧解
- ORA-21520故障 限制某个ip的连接数