⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sillysort.cpp

📁 PASCAL光盘资料PASCAL光盘资料PASCAL光盘资料
💻 CPP
字号:
#include <fstream.h>#include <iostream.h>#include <string.h>#include <stdlib.h>ifstream fin("sillysort.in");ofstream fout("sillysort.out");#define cout foutconst int MAX = 1000+5;int n, a[MAX], b[MAX], used[MAX];int cmp(const void* e1, const void* e2) {	return *((const int*)e1) - *((const int*)e2);}main() {	int icase = 0;	for (; fin >> n;) {		if (n == 0) break;		int i, j;		for (i = 1; i <= n; i++)			fin >> a[i];		memcpy(b, a, sizeof(a));		qsort(&b[1], n, sizeof(int), cmp);		for (i = 1; i <= n; i++) {			for (j = 1; j <= n; j++)				if (a[j] == b[i])					break;			a[j] = -i;		}		for (i = 1; i <= n; i++)			a[i] = -a[i];		int tot = 0;		memset(used, 0, sizeof(used));		for (i = 1; i <= n; i++) if (!used[i]) {			int sum = b[i], min = b[i], count = 1;			used[i] = 1;			for (j = a[i]; j != i; j = a[j]) {				if (b[j] < min) min = b[j];				sum += b[j];				used[j] = 1;				count++;			}			if (sum + min * (count - 2) < sum + min + b[1] * (count + 1))				tot += sum + min * (count - 2);			else				tot += sum + min + b[1] * (count + 1);		}		cout << "Case " << ++icase << ": " << tot << endl << endl;	} 	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -