文章

5

粉丝

0

获赞

23

访问

663

头像
2048的游戏 题解:
P1208
发布于2025年3月20日 16:07
阅读数 179

采用滑动窗口做,不知道为什么如果没有在输入时判断输入数据是否等于2048就只会对50%,有没有大佬能解释一下

#include<bits/stdc++.h>
using namespace std;
int main(){
int t=0;
cin>>t;
int i=0;
for(i=0;i<t;i++){
int n=0;
cin>>n;
vector<int>a(n);
int l=0,r=0,sum=0,flag=0;
for(int j=0;j<n;j++){
    cin>>a[j];
    if(a[j]==2048)flag=1;
}
if(flag==1){
cout<<"YES"<<endl;
continue;
}
sort(a.begin(),a.end());
for(r=0;r<n;r++){
    sum=sum+a[r];
    if(sum>2048){
        sum=sum-a[l];
        l++;
    }
    if(sum==2048){
        flag=1;
        break;
    }
}
if(flag==1)cout<<"YES"<<endl;
else cout<<"NO"<<endl;

}

}
 

登录查看完整内容


登录后发布评论

3 条评论
快乐小土狗
2025年3月20日 17:38

因为题目中说的是:能不能让序列中出现2048这个数据

如果输入是就有2048这个数字,那么自然也是YES

比如:2048 2  2 4 8这样的数据

赞(0)

无123456 : 回复 快乐小土狗: 我直接在滑动窗口里不也能判断吗,我猜想是不是因为没有在输入时判断时间是不是太长了

2025年3月21日 09:47

无123456 : 回复 无123456: 我知道了,因为我错把while写成if了

2025年3月22日 15:14