洛谷P9748题问题代码如何修改?

新手上路,请多包涵

这是我洛谷P9748三次提交的代码,三次都没得分,请能者指教。

//这是第一次的代码,可以体现出我最初的思路,不理解是代码有什么语法问题还是思路有问题....

#include <bits/stdc++.h>
using namespace std;
const int Nmax=1e6+7;
int cnt[Nmax];
long long n;//sum
long long pick=0x3f;

int sum_day(int x){
    while(x<n){
        cnt[1]=1;
        if((x-1)%3==0){
            cnt[x]=1;
        }
        if(cnt[x]!=1){
            sum_day(x+1);
        }
        if(cnt[x]!=0){
            return x;
        }
        ++x;
    }
//    pick=min(pick,i);
//    return pick;
}
int main(){
    cin>>n;
//    memset(cnt,0,sizeof(cnt));
    for(int i=1;i<=n;i++){
        cnt[i]=0;
    }
    sum_day(1);
    return 0;
}

//这是第三次提交的代码,看了题解以后的,因为前两次都超时了,所以就开了1e3大小的数组,没想到还是没过....

#include <bits/stdc++.h>
using namespace std;
const int Nmax=1e3+7;
int cnt[Nmax];
long long n,x;//sum
long long pick=0x3f;

    
int main(){
    cin>>n;
//    memset(cnt,0,sizeof(cnt));
    for(int i=1;i<=n;i++){
        cnt[i]=0;
    }
    while(x<n){
        cnt[1]=1;
        if((x-1)%3==0){
            cnt[x]=1;
        }
        if(cnt[x]!=0){
            break;
        }
        ++x;
        pick=min(pick,x);
    }
    cout<<x<<pick<<endl;
    return 0;
}

这是这道题的链接:
https://www.luogu.com.cn/problem/P9748

阅读 763
1 个回答
第 k 轮,如果有 n 个苹果
   n == 1,当前最后一个苹果被拿走,没有剩余,结束
   用 m 记录最后一个没有拿走的苹果:
      n % 3 == 1 ,当前最后一个苹果被拿走。m = n-1;
      n % 3 != 1 ,当前最后一个苹果未被拿走。m = n;
   下一轮苹果数为 (m-1)/3 *2 + (m-1) % 3

不需要记录所有苹果状态,只需要记录苹果剩下多少个与最后的苹果有没有被取走就好了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题