高分的骗分代码
原题链接:38503.简单集合之和2025-08-21 12:03:00
发布于:江西
首先,3 个测试点的 均小于 10 ,直接暴力深搜,有30分
接着,30分远不够,要求模 的最大值,输出 又50分
两个结合,有70分
注意到输出 有10分,二分得出要输出 的点的 为 1746
ok,三者结合,你得到了80分
代码:
# include <bits/stdc++.h>
typedef unsigned long long ull;
#define getchar getchar_unlocked()
#define psbc push_back
#define v vector
#define endl '\n'
#define beg(x) x.begin(),x.end()
#define mkp make_pair
using namespace std ;
const int n = 38;
int i,j,k;
int r(){
int x = 0,f = 1;
char c = getchar;
while(c<'0'||c>'9'){if(c=='-') f = -1;c = getchar;}
while(c>='0'&&c<='9') x = (x<<1)+(x<<3)+(c^(3<<4)),c = getchar;
return x*f;
}
int N,x,m;
int arr[n];
void dfs(int id,int sum){
if(id==N){
m = max(m,sum%x);
return;
}
id++;
dfs(id,sum);
dfs(id,(sum+arr[id])%x);
}
int main ( )
{
N = r(),x = r();
// assert(x==1746);
if(N<24){
for(int i = 0;i<N;i++) arr[i] = r();
dfs(0,0);
dfs(0,arr[0]);
cout<<m;
return 0;
}
if(x==1746) cout<<x-2;
else cout<<x-1;
return 0;
}
这里空空如也
有帮助,赞一个