1. 程式人生 > 其它 >CCFCSP-202012-2-期末預測之最佳閾值

CCFCSP-202012-2-期末預測之最佳閾值

技術標籤:CCF-CSPccf

只有70分,因為用了兩層迴圈的暴力解法,70%的資料量的200以內,其餘30%執行超時了。在網上看了點100分的解法,用字首和什麼的,看了會兒也沒看太懂,感覺為30分用那麼複雜的不值,剩餘的時間還不如在後面的題裡得點分。
在這裡插入圖片描述

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

int main()
{
	int m;   //m組資料,m最大值為100000
	int y[100000];  //m個同學的安全指數
	int result[100000];  //m個同學 是否掛科,0掛,1不掛

	int predict[
100000]; //在某閾值下對m個同學的成績預測結果 0或1 int right_count[100000] = { 0 }; //每個閾值預測正確的總次數 int best_index; //最佳閾值對應是第幾個同學,即y[i]的i int best_threshold; //最佳閾值,可能有多個,但是取最大的那個 int best_count; //最大的正確預測次數 cin >> m; for (int i = 0; i < m; i++) { cin >> y[i] >> result[i]; } // 1、初始化資料,保證迴圈處理的統一性 best_index =
0; //第幾個 best_threshold = 0; //當前最佳閾值 best_count = 0; //當前最大正確預測次數 // 2、計算m個閾值的預測正確次數 // 3、求最大閾值 //外層迴圈:y[i]表示第i個閾值,也就是第i個同學的安全指數 for (int i = 0; i < m; i++) { //內層迴圈:y[j]表示第j個同學的安全指數 for (int j = 0; j < m; j++) { // 1、計算預測值 if (y[j] < y[i]) predict[j] = 0; else predict[j] =
1; // 2、比較預測值與實際值,如果正確,更新預測正確的次數 if (predict[j] == result[j]) right_count[i]++; } // cout << "y[" <<i <<"]="<<y[i]<<"作為閾值時的最大預測正確次數:" << right_count[i] << endl; //如果y[i]的正確預測次數比目前的best_threshold多,直接更新 if (right_count[i] > best_count) { best_index = i; best_threshold = y[best_index]; best_count = right_count[best_index]; } //如果y[i]的正確預測次數 等於 目前的best_threshold,再比較y[i]與best_threshold的大小,取大的 else if (right_count[i] == best_count) { if (y[i] > best_threshold) { best_index = i; best_threshold = y[best_index]; best_count = right_count[best_index]; } } else; } cout << best_threshold; return 0; }