国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

從PAT甲級1047題說開去

2019-11-08 18:47:38
字體:
來源:轉載
供稿:網友

原題:https://www.patest.cn/contests/pat-a-PRactise/1047 題意大概就是說,給定學生的id和該生選修的課程id,要根據課程id從大到小的順序把選修這門課的學生打印出來,打印的時候學生依照字母表順序打印。

我一看,25分題,說明是略有難度的,但是直覺上這題并不復雜,然后查了一下大神們的答案,比如:http://blog.csdn.net/sunbaigui/article/details/8656971 大部分都選擇不使用字符串而是選擇char類型的數組存放字符串,因為遇到了超時的問題。研讀代碼后發現,他們以課程為單位進行排序,也就是說,每處理一門課程就要進行一次排序。我認為可以直接對所有的學生先進行排序,建立一個課程數*學生數的表格,類型為bool,表示該課程是否有學生修讀,然后依次輸出。

我的方案是:先一次性讀完所有的字符串,然后直接排序,之后再逐行將排序過的字符串送到流中,再讀一遍,將定義的課程數*學生數表格中相應位置為1,然后輸出。思路很簡單,在自己的VS里也運行成功了,但是上傳后告訴我段錯誤。我表示???

后來從這個bbs上找到了答案:http://bbs.csdn.net/topics/260036862/ 是由于我在函數內定義的數組太大了,導致堆棧溢出,方法包括定義全局變量和定義動態數組。兩個方法都嘗試了一遍,結果告訴我內存溢出了。 定義動態數組的方法:http://blog.csdn.net/kangroger/article/details/37773929

其實仔細想來,也不一定不會超時,定義大數組解決問題也不是良好的編程習慣,還是老老實實按照大神們的做法弄吧。

以下是最后一個測試點內存溢出的代碼,我個人認為流處理動態數組還是在做題時挺好用的東西。

#include<iostream>#include<string>#include<vector>#include<algorithm>#include<sstream>using namespace std;const int MAX_COURSE = 2501;const int MAX_STUDENT = 40000;int main(){ vector<string> all_data; int stu_num, cou_num; cin >> stu_num >> cou_num; int row = cou_num+1, col = stu_num; bool **course_student_flag = new bool*[row]; for (int i = 0; i<row; i++) course_student_flag[i] = new bool[col]; for (int i = 0; i<cou_num; ++i) { for (int j = 0; j<stu_num; ++j) course_student_flag[i][j] = false; } int course_student_num[MAX_COURSE] = { 0 }; getchar(); for (int i = 0; i < stu_num; ++i) { string temp; getline(cin, temp); all_data.push_back(temp); } sort(all_data.begin(), all_data.end()); for (int i = 0; i < stu_num; ++i) { stringstream ss(all_data[i]); string temp; int single_num; int course_id; ss >> temp >> single_num; for (int j = 0; j < single_num; ++j) { ss >> course_id; course_student_flag[course_id][i]=true; ++course_student_num[course_id]; } } for (int i = 1; i <= cou_num; ++i) { cout << i << " " << course_student_num[i] << endl; for (int j = 0; j < stu_num; ++j) { if (course_student_flag[i][j] != 0) cout << all_data[j][0] << all_data[j][1] << all_data[j][2] << all_data[j][3] << endl; } } for (int i = 0; i<row; i++) delete[]course_student_flag[i]; delete[]course_student_flag; getchar(); getchar(); return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉定区| 涿鹿县| 穆棱市| 石河子市| 阳谷县| 梁平县| 尚志市| 柯坪县| 马鞍山市| 宣汉县| 崇明县| 兰坪| 滦南县| 麻栗坡县| 新龙县| 简阳市| 怀远县| 新疆| 会东县| 荔浦县| 霍林郭勒市| 南靖县| 兰坪| 清徐县| 新蔡县| 桃园县| 哈尔滨市| 神农架林区| 蒙城县| 马鞍山市| 大庆市| 介休市| 台南市| 洞口县| 紫云| 唐山市| 斗六市| 墨竹工卡县| 巨野县| 双牌县| 郎溪县|