奥运排序问题
題目描述: 輸入: 有多組數據。
第一行給出國家數N,要求排名的國家數M,國家號從0到N-1。
第二行開始的N行給定國家或地區的奧運金牌數,獎牌數,人口數(百萬)。
接下來一行給出M個國家號。 輸出: 排序有4種方式: 金牌總數 獎牌總數 金牌人口比例 獎牌人口比例
對每個國家給出最佳排名排名方式 和 最終排名
格式為: 排名:排名方式
如果有相同的最終排名,則輸出排名方式最小的那種排名,對于排名方式,金牌總數 < 獎牌總數 < 金牌人口比例 < 獎牌人口比例
如果有并列排名的情況,即如果出現金牌總數為 100,90,90,80.則排名為1,2,2,4.
每組數據后加一個空行。 樣例輸入: 4 4
4 8 1
6 6 2
4 8 2
2 12 4
0 1 2 3
4 2
8 10 1
8 11 2
8 12 3
8 13 4
0 3 樣例輸出: 1:3
1:1
2:1
1:21:1
1:1
1 #include <cstdlib> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <cctype> 6 7 #include <iostream> 8 #include <string> 9 #include <vector> 10 #include <list> 11 #include <deque> 12 #include <set> 13 #include <map> 14 #include <stack> 15 #include <queue> 16 #include <algorithm> 17 18 #define MAXN 100001 19 #define MAXD 99999999 20 using namespace std; 21 22 23 struct Re{ 24 int id; 25 int gn; 26 int an; 27 int rn; 28 double avgn; 29 double avan; 30 }; 31 32 vector<Re>vt1,vt2; 33 34 35 int vv[1000]; 36 37 38 bool cmp1(Re x,Re y) 39 { 40 if(x.gn>y.gn) 41 return true; 42 return false; 43 } 44 45 46 bool cmp2(Re x,Re y) 47 { 48 if(x.an>y.an) 49 return true; 50 return false; 51 } 52 53 54 bool cmp3(Re x,Re y) 55 { 56 if(x.avgn>y.avgn) 57 return true; 58 return false; 59 } 60 61 62 bool cmp4(Re x,Re y) 63 { 64 if(x.avan>y.avan) 65 return true; 66 67 return false; 68 } 69 70 71 72 73 74 int main() 75 { 76 77 int n,m; 78 79 int i,j,k; 80 81 82 while(scanf("%d%d",&n,&m)!=EOF) 83 { 84 vt1.clear(); 85 vt2.clear(); 86 87 for(i=0;i<n;i++) 88 { 89 Re ans; 90 91 scanf("%d%d%d",&ans.gn,&ans.an,&ans.rn); 92 93 ans.id=i; 94 ans.avan=ans.an*1.0/ans.rn; 95 ans.avgn=ans.gn*1.0/ans.rn; 96 97 98 99 vt1.push_back(ans); 100 } 101 102 103 104 for(i=0;i<m;i++) 105 { 106 int v; 107 108 scanf("%d",&v); 109 110 vv[i]=v; 111 112 vt2.push_back(vt1[v]); 113 } 114 115 116 for(i=0;i<m;i++) 117 { 118 int v=vv[i]; 119 120 int rk; 121 int ty; 122 123 124 sort(vt2.begin(),vt2.end(),cmp1); 125 126 for(j=0;j<vt2.size();j++) 127 { 128 if(vt2[j].id==v) 129 {break;} 130 } 131 132 for(k=j-1;k>=0;k--) 133 { 134 if(vt2[k].gn!=vt2[j].gn) 135 {break;} 136 } 137 138 139 140 141 k++; 142 rk=k; 143 ty=1; 144 145 146 147 148 sort(vt2.begin(),vt2.end(),cmp2); 149 150 for(j=0;j<vt2.size();j++) 151 { 152 if(vt2[j].id==v) 153 {break;} 154 } 155 156 for(k=j-1;k>=0;k--) 157 { 158 if(vt2[k].an!=vt2[j].an) 159 {break;} 160 } 161 162 163 k++; 164 165 if(k<rk) 166 { 167 rk=k; 168 ty=2; 169 } 170 171 172 173 174 175 176 sort(vt2.begin(),vt2.end(),cmp3); 177 178 for(j=0;j<vt2.size();j++) 179 { 180 if(vt2[j].id==v) 181 {break;} 182 } 183 184 for(k=j-1;k>=0;k--) 185 { 186 if(vt2[k].avgn!=vt2[j].avgn) 187 {break;} 188 } 189 190 191 k++; 192 193 if(k<rk) 194 { 195 rk=k; 196 ty=3; 197 } 198 199 200 201 202 203 204 sort(vt2.begin(),vt2.end(),cmp4); 205 206 for(j=0;j<vt2.size();j++) 207 { 208 if(vt2[j].id==v) 209 {break;} 210 } 211 212 for(k=j-1;k>=0;k--) 213 { 214 if(vt2[k].avan!=vt2[j].avan) 215 {break;} 216 } 217 218 219 k++; 220 221 if(k<rk) 222 { 223 rk=k; 224 ty=4; 225 } 226 227 228 229 230 231 232 cout<<rk+1<<":"<<ty<<endl; 233 234 235 236 } 237 cout<<endl; 238 } 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 return 0; 261 }
按要求,給國家進行排名。
第一行給出國家數N,要求排名的國家數M,國家號從0到N-1。
第二行開始的N行給定國家或地區的奧運金牌數,獎牌數,人口數(百萬)。
接下來一行給出M個國家號。
對每個國家給出最佳排名排名方式 和 最終排名
格式為: 排名:排名方式
如果有相同的最終排名,則輸出排名方式最小的那種排名,對于排名方式,金牌總數 < 獎牌總數 < 金牌人口比例 < 獎牌人口比例
如果有并列排名的情況,即如果出現金牌總數為 100,90,90,80.則排名為1,2,2,4.
每組數據后加一個空行。
1 #include <cstdlib> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <cctype> 6 7 #include <iostream> 8 #include <string> 9 #include <vector> 10 #include <list> 11 #include <deque> 12 #include <set> 13 #include <map> 14 #include <stack> 15 #include <queue> 16 #include <algorithm> 17 18 #define MAXN 100001 19 #define MAXD 99999999 20 using namespace std; 21 22 23 struct Re{ 24 int id; 25 int gn; 26 int an; 27 int rn; 28 double avgn; 29 double avan; 30 }; 31 32 vector<Re>vt1,vt2; 33 34 35 int vv[1000]; 36 37 38 bool cmp1(Re x,Re y) 39 { 40 if(x.gn>y.gn) 41 return true; 42 return false; 43 } 44 45 46 bool cmp2(Re x,Re y) 47 { 48 if(x.an>y.an) 49 return true; 50 return false; 51 } 52 53 54 bool cmp3(Re x,Re y) 55 { 56 if(x.avgn>y.avgn) 57 return true; 58 return false; 59 } 60 61 62 bool cmp4(Re x,Re y) 63 { 64 if(x.avan>y.avan) 65 return true; 66 67 return false; 68 } 69 70 71 72 73 74 int main() 75 { 76 77 int n,m; 78 79 int i,j,k; 80 81 82 while(scanf("%d%d",&n,&m)!=EOF) 83 { 84 vt1.clear(); 85 vt2.clear(); 86 87 for(i=0;i<n;i++) 88 { 89 Re ans; 90 91 scanf("%d%d%d",&ans.gn,&ans.an,&ans.rn); 92 93 ans.id=i; 94 ans.avan=ans.an*1.0/ans.rn; 95 ans.avgn=ans.gn*1.0/ans.rn; 96 97 98 99 vt1.push_back(ans); 100 } 101 102 103 104 for(i=0;i<m;i++) 105 { 106 int v; 107 108 scanf("%d",&v); 109 110 vv[i]=v; 111 112 vt2.push_back(vt1[v]); 113 } 114 115 116 for(i=0;i<m;i++) 117 { 118 int v=vv[i]; 119 120 int rk; 121 int ty; 122 123 124 sort(vt2.begin(),vt2.end(),cmp1); 125 126 for(j=0;j<vt2.size();j++) 127 { 128 if(vt2[j].id==v) 129 {break;} 130 } 131 132 for(k=j-1;k>=0;k--) 133 { 134 if(vt2[k].gn!=vt2[j].gn) 135 {break;} 136 } 137 138 139 140 141 k++; 142 rk=k; 143 ty=1; 144 145 146 147 148 sort(vt2.begin(),vt2.end(),cmp2); 149 150 for(j=0;j<vt2.size();j++) 151 { 152 if(vt2[j].id==v) 153 {break;} 154 } 155 156 for(k=j-1;k>=0;k--) 157 { 158 if(vt2[k].an!=vt2[j].an) 159 {break;} 160 } 161 162 163 k++; 164 165 if(k<rk) 166 { 167 rk=k; 168 ty=2; 169 } 170 171 172 173 174 175 176 sort(vt2.begin(),vt2.end(),cmp3); 177 178 for(j=0;j<vt2.size();j++) 179 { 180 if(vt2[j].id==v) 181 {break;} 182 } 183 184 for(k=j-1;k>=0;k--) 185 { 186 if(vt2[k].avgn!=vt2[j].avgn) 187 {break;} 188 } 189 190 191 k++; 192 193 if(k<rk) 194 { 195 rk=k; 196 ty=3; 197 } 198 199 200 201 202 203 204 sort(vt2.begin(),vt2.end(),cmp4); 205 206 for(j=0;j<vt2.size();j++) 207 { 208 if(vt2[j].id==v) 209 {break;} 210 } 211 212 for(k=j-1;k>=0;k--) 213 { 214 if(vt2[k].avan!=vt2[j].avan) 215 {break;} 216 } 217 218 219 k++; 220 221 if(k<rk) 222 { 223 rk=k; 224 ty=4; 225 } 226 227 228 229 230 231 232 cout<<rk+1<<":"<<ty<<endl; 233 234 235 236 } 237 cout<<endl; 238 } 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 return 0; 261 }
?
轉載于:https://www.cnblogs.com/zjushuiping/archive/2012/05/31/2527946.html
總結
- 上一篇: 去除win7桌面快捷方式小箭头
- 下一篇: Android 和 Chrome OS