标记重复的和居然不过!33分
查看原帖
标记重复的和居然不过!33分
1139280
Eryi117楼主2024/9/4 20:18

题目说:要求你计算出和为素数共有多少种。

就是不能重复,我把重复的和标记去掉,只得到33分。

不知道是题目出错还是数据问题。

自测数据

4 2
1 1 2 4

去掉重复和33分

#include<bits/stdc++.h>
using namespace std;
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define mm(a, b) memset(a, b, sizeof(a))
#define ll long long
#define mp make_pair
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int inf = 0x3f3f3f3f, mod = 1e9 + 7;
const int N = 1e6 + 10;

int t, sum, cnt = 0, n, k, a[N];
bool vis[N];

bool ip(int x)
{
    if (x < 2) return false;
    for (int i = 2; i <= x / i; i++)
        if (x % i == 0)
            return false;
    return true;
}

void dfs(int t, int sum, int len) {
    if (len == k) {
        if (ip(sum)&&!vis[sum]) cnt++;
        vis[sum]=1;
        return;
    }
    if (t > n) return;

    dfs(t + 1, sum, len);
    dfs(t + 1, sum + a[t], len + 1);
}

void solve() {
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];
    mm(vis, 0); 
    dfs(1, 0, 0);
    cout << cnt;
}

int main() {
    ios;
    int t = 1;
    while (t--) {
        solve();
    }
    return 0;
}

不去重全过

#include<bits/stdc++.h>
using namespace std;
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define mm(a, b) memset(a, b, sizeof(a))
#define ll long long
#define mp make_pair
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int inf = 0x3f3f3f3f, mod = 1e9 + 7;
const int N = 1e6 + 10;

int t, sum, cnt = 0, n, k, a[N];
bool vis[N];

bool ip(int x)
{
    if (x < 2) return false;
    for (int i = 2; i <= x / i; i++)
        if (x % i == 0)
            return false;
    return true;
}

void dfs(int t, int sum, int len) {
    if (len == k) {
        if (ip(sum)) cnt++;
        return;
    }
    if (t > n) return;

    dfs(t + 1, sum, len);
    dfs(t + 1, sum + a[t], len + 1);
}

void solve() {
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];
    mm(vis, 0); 
    dfs(1, 0, 0);
    cout << cnt;
}

int main() {
    ios;
    int t = 1;
    while (t--) {
        solve();
    }
    return 0;
}
2024/9/4 20:18
加载中...