日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[SOJ1006] Team Rankings

發布時間:2025/4/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [SOJ1006] Team Rankings 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用枚舉法實現
代碼如下:
//我是先用全排列生成了全部的串,再寫的
全排列生成代碼,點擊可看
枚舉的時候用了減枝,所以可能會稍微快點
但是emmm
看完師兄們的解法只需要0.00sec之后,我這個0.02sec的菜雞就不知道該說什么好了

代碼如下:(會比較好理解)

#include <iostream> #include <vector> using namespace std; #include <cstring> #include <algorithm> string strSet[] = { "ABCDE", "ABCED", "ABDCE", "ABDEC", "ABECD", "ABEDC", "ACBDE", "ACBED", "ACDBE", "ACDEB", "ACEBD", "ACEDB", "ADBCE", "ADBEC", "ADCBE", "ADCEB", "ADEBC", "ADECB", "AEBCD", "AEBDC", "AECBD", "AECDB", "AEDBC", "AEDCB", "BACDE", "BACED", "BADCE", "BADEC", "BAECD", "BAEDC", "BCADE", "BCAED", "BCDAE", "BCDEA", "BCEAD", "BCEDA", "BDACE", "BDAEC", "BDCAE", "BDCEA", "BDEAC", "BDECA", "BEACD", "BEADC", "BECAD", "BECDA", "BEDAC", "BEDCA", "CABDE", "CABED", "CADBE", "CADEB", "CAEBD", "CAEDB", "CBADE", "CBAED", "CBDAE", "CBDEA", "CBEAD", "CBEDA", "CDABE", "CDAEB", "CDBAE", "CDBEA", "CDEAB", "CDEBA", "CEABD", "CEADB", "CEBAD", "CEBDA", "CEDAB", "CEDBA", "DABCE", "DABEC", "DACBE", "DACEB", "DAEBC", "DAECB", "DBACE", "DBAEC", "DBCAE", "DBCEA", "DBEAC", "DBECA", "DCABE", "DCAEB", "DCBAE", "DCBEA", "DCEAB", "DCEBA", "DEABC", "DEACB", "DEBAC", "DEBCA", "DECAB", "DECBA", "EABCD", "EABDC", "EACBD", "EACDB", "EADBC", "EADCB", "EBACD", "EBADC", "EBCAD", "EBCDA", "EBDAC", "EBDCA", "ECABD", "ECADB", "ECBAD", "ECBDA", "ECDAB", "ECDBA", "EDABC", "EDACB", "EDBAC", "EDBCA", "EDCAB", "EDCBA" };struct Node{char x,y;Node(char a='A',char b='A'):x(a),y(b){}; }; int label[120];//總共有120種可能排法,只需要找到最簡單的那個就好了 int minAns = 1<<30; string ans; string DataSet[101]; int n; int jiao(vector<Node> v1,vector<Node> v2){int a = 0;for (int i = 0; i < v1.size(); ++i) {for (int j = 0; j < v2.size(); ++j){if (v1[i].x == v2[j].x && v1[i].y == v2[j].y){a++;break;}}}return a; } int cHelp(int p,int q){//返回第p個序列和第q個序列之間的差距// p在strSet中找,q在DataSet中找 vector<Node> v1,v2;//v1放的是strSet[p]的二元子串;v2放的是v2放的是DataSet[q]的二元子串 for (int i = 0; i < 4;++i){for (int j = i + 1; j < 5; ++j){v1.push_back(Node(strSet[p][i], strSet[p][j]));v2.push_back(Node(DataSet[q][i], DataSet[q][j]));}}// sort and int num = jiao(v1,v2);return 10 - num; } // calculate void calculate(int temp){ // temp在strSet中 //計算第temp個字符的sum和//實現一個減枝,如果目前加的和已經大于了當前最小的那個,就可以不用來看了for (int j = 0; j < n; ++j){label[temp] += cHelp(temp, j);if (label[temp] > minAns) {break;} // 減枝部分 }if (label[temp] < minAns){ans = strSet[temp];minAns = label[temp]; // 這是數值更新部分 } } int main(){while (cin >> n && n){for (int i = 0; i < n; ++i){cin >> DataSet[i];}memset(label,0,sizeof(label));//標記復原為0; minAns = 1<<30;ans = "";//初始化 for (int i = 0; i < 120; ++i){calculate(i);} cout << ans<<" is the median ranking with value "<<minAns<<"."<< endl;} }

最后,老套路,宣傳一波自己的公眾號!(求關注哇!)
本人中大一肥宅,歡迎大家關注,請掃下面的二維碼(〃’▽’〃)


如果覺得有幫助的話,可以掃碼,贊賞鼓勵一下!謝謝!


總結

以上是生活随笔為你收集整理的[SOJ1006] Team Rankings的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。