3 条题解
-
-1
#include #include #include #include #include #include #include using namespace std; long long que[1000001]; int main(){ long long m,n; while(scanf("%lld%lld",&m,&n) > 0){ long long h1,h2,tail; tail = 1; h1 = 1; h2 = 1; que[1] = m; while(tail < n){ long long t1 = (que[h1]<<1) + 1,t2 = que[h2] * 3 + 1; //之所以用h1,h2是因为比较大的后入队列,因为可能出现后面的2x + 1 可能小于前面的3x + 1等诸如此类的情况。 if(t1 < t2){ que[++tail] = t1; h1 ++; }else if(t1 > t2){ que[++tail] = t2; h2++; }else{ que[++tail] = t2; h1++; h2++; } } printf("%lld\n",que[tail]); } return 0; }
-
-1
MLE代码: #include<stdio.h>
#include<stdlib.h>
typedef struct Linklist {
**int** **id**;
**struct** **Linklist**\*** **next**;**
} LNode;
void joseefu(int n)** **{
**LNode**\*** **h** **=** **(**LNode**\*)**malloc**(**sizeof**(**LNode**));
**LNode**\*** **tail** **=** **h**;**
**h**->**next** **=** **NULL**;
**for** **(**int** **i** **=** **1**;** **i** **<=** **n**;** **i**++)** **{**
**LNode**\*** **node** **=** **(**LNode**\*)**malloc**(**sizeof**(**LNode**));
**node**->**id** **=** **i**;
**node**->**next** **=** **NULL**;
**tail**->**next** **=** **node**;
**tail** **=** **node**;
**}**
**tail**->**next** **=** **h**->**next**;
**LNode**\*** **pre** **=** **h**;**
**LNode**\*** **p** **=** **h**->**next**;**
**int** **i** **=** **0**;
**while** **(**p**->**next** **!=** **p**)** **{**
**i**++;
**if** **(**i** **%** **3** **==** **0**)** **{**
**printf**(**"%d** **"**,** **p**->**id**);**
**pre**->**next** **=** **p**->**next**;
**p** **=** **pre**->**next**;
**}** **else** **{**
**pre** **=** **p**;
**p** **=** **p**->**next**;
**}**
**}**
**printf**(**"%d**\\n**"**,** **p**->**id**);**
}
int main()** **{
**int** **m**,** **n**;**
**scanf**(**"%d"**,** **&**m**);
**for** **(**int** **i** **=** **0**;** **i** **<** **m**;** **i**++)** **{**
**scanf**(**"%d"**,** **&**n**);
**joseefu**(**n**);
**}**
**return** **0**;
} RE代码: #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define ID = 3;//报3** **者退出圈外
int main()
{
**int** **n**,**i**,**j**,**people**,**index**,**count**;
**int** **DeleteID**[**51**];
**while**(**scanf**(**"%d"**,&**n**)** **!=** **EOF**){**
**for**(**i** **=** **0**;**i** **<** **n**;**i**++){
**int** **Flag**[**51**]** **=** **{**0**};**//标记1为删除**
**count** **=** **0**;**//统计删除的人数**
**index** **=** **1**;
**scanf**(**"%d"**,&**people**);
**for**(**j** **=** **0**;**j** **<** **people**;**j**++){
**//报3** **者退出圈外**
**if**(**index** **%** **3** **==** **0** **&&** **Flag**[**j**]** **==** **0**){**
**//删除**
**Flag**[**j**]** **=** **1**;**
**//重新报数**
**index** **=** **1**;
**//标记删除的人数**
**DeleteID**[**count**]** **=** **j**+**1**;**
**count**++;
**}**
**//报数** **删除的不用报(Flag[j]** **=** **1已删除不用报数)**
**if**(**Flag**[**j**]** **==** **0**){**
**index**++;
**}**
**//下一圈报数**
**if**(**j** **==** **people**-**1**){
**j** **=** **-**1**;**
**}**
**//全部退出**
**if**(**count** **==** **people**){
**break**;
**}**
**}**//for
**//输出每个退出人的原序号**
**for**(**j** **=** **0**;**j** **<** **count**;**j**++){
**if**(**j** **==** **count** **-** **1**){
**printf**(**"%d**\\n**"**,**DeleteID**[**j**]);
**}**
**else**{
**printf**(**"%d** **"**,**DeleteID**[**j**]);
**}**
**}**
**}**//for
**}**//while
**return** **0**;
} AC代码: #include<bits/stdc++.h>
using namespace std;
#include<queue>
queue<int>** que;**
int main()
{
**int** **m**,**n**;
**cin**>>**n**>>**m**;
**for**(**int** **i**=**1**;**i**<=**n**;**i**++)
**que**.**push**(**i**);
**while**(**1**)
**{**
**for**(**int** **i**=**1**;**i**<=**m**-**1**;**i**++)
**{**
**int** **temp**=**que**.**front**();
**que**.**push**(**temp**);
**que**.**pop**();
**}**
**cout**<<**que**.**front**()<<**"** **"**;
**que**.**pop**();
**if**(**que**.**empty**())
**break**;
**}**
**return** **0**;
}
- 1
信息
- ID
- 440
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 41
- 已通过
- 16
- 上传者