1056. Mice and Rice (25)
2017-02-15 17:13
316 查看
这道题有点难读懂,做了n久,理解错误,其实他的意思是,序列按给出站的编号站好位置,开始筛选,最后按老鼠编号的顺序输出
即开始按 编号6 编号0 编号8 编号7 编号10 编号5 编号9 编号1 编号4 编号2 编号3站好
筛选完成 按 编号0 编号1 编号2 …编号10输出
即开始按 编号6 编号0 编号8 编号7 编号10 编号5 编号9 编号1 编号4 编号2 编号3站好
筛选完成 按 编号0 编号1 编号2 …编号10输出
#include<iostream> #include<vector> #include<algorithm> #pragma warning(disable:4996) using namespace std; int P, G; struct node { int data; int rank; int index;//代表序号 int n;//代表位置号 node() { rank = 0; } bool operator<(const node that)const { //排序,保持原来站位的基础上,把有rank的放后面去 if (this->rank < that.rank || (this->rank == that.rank && this->n < that.n)) return true; return false; } }; vector<node> all; int main() { cin >> P >> G; all.resize(P); for (int t = 0;t < P;t++) { scanf("%d", &all[t].data); all[t].index = t; } for (int t = 0;t < P;t++) { int temp; scanf("%d", &temp); all[temp].n = t; } sort(all.begin(), all.end(), [](node a, node b) {return a.n < b.n;});//按给出的序列位置站好 int num = P; while (num != 1)//进行筛选,循环 { int temp = num%G != 0 ?num / G+2 : num / G+1; for (int i = 0;i < num;i+= G) { int max=all[i].data, v=i; all[i].rank = temp; for (int j = i+1;j < i + G;j++) { if ( j >= P||all[j].rank != 0) break; if (max < all[j].data) { max = all[j].data;v = j; } all[j].rank = temp; } all[v].rank = 0; } num = temp-1; sort(all.begin(),all.end()); } all[0].rank = 1; sort(all.begin(), all.end(), [](node a, node b) {return a.index < b.index;});//按位置排序 int flag = 0; for(auto x:all)//输出 if (flag == 0) { flag = 1;printf("%d", x.rank); } else printf(" %d", x.rank); cout << endl; }
相关文章推荐
- PAT1056 Mice and Rice (25)
- 1056. Mice and Rice (25)
- 浙大2013复试:PAT 1056. Mice and Rice (25)
- 1056. Mice and Rice (25)
- 1056. Mice and Rice (25)
- 1056. Mice and Rice (25)
- 1056. Mice and Rice (25)【模拟】——PAT (Advanced Level) Practise
- PAT (Advanced) 1056. Mice and Rice (25)
- 1056. Mice and Rice (25)
- PAT 1056. Mice and Rice (25)
- PAT (Advanced Level) Practise 1056 Mice and Rice (25)
- 1056. Mice and Rice (25)
- 1056.Mice and Rice (25)...to be continued...
- PAT (Advanced Level) 1056. Mice and Rice (25) 模拟比赛,用queue辅助
- 1056. Mice and Rice (25)
- PAT 甲级 1056. Mice and Rice (25)
- 1056. Mice and Rice (25)-PAT
- PAT甲级1056. Mice and Rice (25)
- 1056. Mice and Rice (25)
- PAT甲题题解-1056. Mice and Rice (25)-模拟题