SHAOXIAOJ正在加载中...

1951: koala的程序

金币值:2 定数:1 时间限制:50.000 s 内存限制:512 M
正确:1 提交:6 正确率:16.67% 命题人:
点赞量:0 收藏量:0 题目类型:程序

题目描述

### 题目描述: koala设计了一个程序,首先他写了一个暴力算法,但是在他写完之后受到电脑病毒的影响而失忆。好在他的源代码和题面数据范围保留了下来(数据范围在输入描述中已经给出),但是现在仍然无法通过这个题目。由于电脑病毒的影响,题面已经消失,现在他希望你基于源代码做出优化来解决这道题。 C++代码: ```C++ #include using namespace std; // 链表结构体定义 typedef struct node { int id; struct node *next; } *pNode, Node; // 循环链表头节点 pNode head; // 按顺序删除的前n-1个节点的id构成的列表 vector ans; int main() { // n个节点,判断值k int n, k; cin >> n >> k; // 构造包含n个节点的循环链表 head = (pNode)malloc(sizeof(Node)); pNode now = head; for (int i = 1; i <= n; ++i) { pNode a = (pNode)malloc(sizeof(Node)); a->id = i; now->next = a; now = now->next; } now->next = head->next; // pc为计数器 int pc = 0; now = head; // 当前节点的上一个节点 pNode last = nullptr; // 程序执行到链表只剩下最后一个节点为止 while (n > 1) { pc++; last = now; now = now->next; // 当计数器pc = k时从循环链表中删除当前节点,并把被删除的节点的id添加到答案列表ans中 if (pc == k) { last->next = now->next; n--; pc = 0; ans.push_back(now->id); } } // 输出最终答案 for (auto id : ans) { cout << id << ' '; } return 0; } ``` ## 格式 ### 输入格式: $ n, k (2 \le n \le 3 * 10^5 , 1 \le k \le 3 * 10^5) $ ### 输出格式: 根据题意输出答案 ## 样例 1 ### 输入: ``` 10 3 ``` ### 输出: ``` 3 6 9 2 7 1 8 5 10 ```

输入样例    复制

10 3

输出样例    复制

3 6 9 2 7 1 8 5 10