碰撞的小球
#include #include #include #include using namespace std; struct Node{ int loc; int dir; // 1 : 向右; -1: 向左 }; vector nodes; // vector的话方便排序 bool cmp(Node a, Node b) { return a.loc < b.loc; }; int main() { int N,L,T; cin>>N>>L>>T; for (int i = 0; i < N; ++i) { int cur; cin>>cur; nodes.push_back(Node{cur, 1}); } // map mymap1, mymap2; for (int i = 0; i < N; ++i) { // 记录原始数据的位置与下标的映射关系 mymap1[nodes[i].loc] = i; } sort(nodes.begin(), nodes.end(), cmp); // 原始数据可能是无序的, 需要排序 for (int i = 0; i < N; ++i) { // 记录排序后数据的位置与下标的映射关系 mymap2[nodes[i].loc] = i; } int indexs[N]; // new 2 original int index = 0; for (pair p: mymap2) { // 记录排序后数据与原始数据的下标的映射关系 indexs[index++] = mymap1[p.first]; } // for (int i = 0; i < T; ++i) { // i 时刻 Node nxtnodes[1002]; // 全部到下一步的位置 for (int j = 0; j < N; ++j) { if (nodes[j].loc == 0 ) { // <0, x> -> <1, 1> nxtnodes[j].loc = 1; nxtnodes[j].dir = 1; //cout<<"1: "< // -> nxtnodes[j].loc = L - 1; nxtnodes[j].dir = -1; //cout<<"2: "< nxtnodes[j].loc = nodes[j].loc + nodes[j].dir; nxtnodes[j].dir = nodes[j].dir; //cout<<"3: "< if (j < N - 1 && nxtnodes[j].loc == nxtnodes[j + 1].loc) { // 相撞 nodes[j].loc = nxtnodes[j].loc; nodes[j + 1].loc = nxtnodes[j + 1].loc; nodes[j].dir = -1; nodes[j + 1].dir = 1; ++j; } else { nodes[j].loc = nxtnodes[j].loc; nodes[j].dir = nxtnodes[j].dir; } } } // 一定要记得输出的时候得按原来的顺序 int ans[N]; for (int i = 0; i < N; ++i) { ans[indexs[i]] = nodes[i].loc; } for(int i = 0; i < N; ++i) { cout<
上一篇 Python(31):解决Crypto一直安装出错的问题
下一篇 任意从键盘输入10个整数存入数组a中,把数组a中从第一项开始所有相邻两项的和 存入数组b中,并输出数组b的内容。
版权所有 (c)2021-2022 MSHXW.COM
ICP备案号:晋ICP备2021003244-6号