求助40pts 有几个超时还有一个wa
查看原帖
求助40pts 有几个超时还有一个wa
525590
PlayerMo楼主2023/7/7 10:33
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <climits>
#include <cstring>
using namespace std;
int n, m;
string ans = "";

struct {
	int f;//方差
	int number;
} all[1000000];

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	//freopen("JUNXUNin.txt", "r", stdin);
	cin >> m >> n;
	double a[n + 1][m + 1], b[n + 1][m + 1];
	double  counta[n + 1] = {}, countb[n + 1] = {}, averagea[n + 1], averageb[n + 1], geta = 0, getb = 0, s2a = 0, s2b = 0;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> a[i][j];
			counta[i] = counta[i] + a[i][j];

		}
		averagea[i] = counta[i] / m;
	}
	for (int k = 1; k <= n; k++) {
		for (int l = 1; l <= m; l++) {
			cin >> b[k][l];
			countb[k] = countb[k] + b[k][l];

		}
		averageb[k] = countb[k] / m;
	}
	for (int g1 = 1; g1 <= n; g1++) {
		for (int g3 = 1; g3 <= m; g3++) {
			geta = geta + pow((a[g1][g3] - averagea[g1]), 2);
			getb = getb + pow((b[g1][g3] - averageb[g1]), 2);
			//	cout << geta << ' ';
		}
		s2a = geta / m;
		s2b = getb / m;
		all[g1].number = g1;
		all[g1].f = s2a + s2b;
		//	cout << s2a << ' ';
		geta = 0;
		getb = 0;
	}//计算方差
	int max = INT_MIN, min = INT_MAX, maxnumber, minnumber, left = 1, right = m, times = 0, to;
	bool flag = 1;
	int gg;
	while (1) {
		flag = 1;
		for (int i = 1; i < n; i++) {
			gg = i + 1;
			if (all[i].f > all[i + 1].f) {
				swap(all[i].f, all[i + 1].f);
				flag = false;
				ans = ans + to_string(i);
				ans = ans + " ";
				ans = ans + to_string(i + 1);
				ans = ans + "\n";
				times++;
			}
		}
		if (flag)
			break;
	}//冒泡排序
	cout << times << endl;
	cout << ans;
	//fclose(stdin);
	return 0;
	//结构体数组+选排,一边排一边把换位输出good
}
2023/7/7 10:33
加载中...