这是我洛谷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;
}
不需要记录所有苹果状态,只需要记录苹果剩下多少个与最后的苹果有没有被取走就好了。