QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#60595#2544. Flatland Currency12345678WA 2ms3524kbC++142.6kb2022-11-05 17:19:272022-11-05 17:19:28

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-11-05 17:19:28]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3524kb
  • [2022-11-05 17:19:27]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mp make_pair
#define inf 1e18
#define pii pair <int, int>
const int mod = 1e9 + 7;
int read () {
	int x = 0, f = 1;
	char ch = getchar ();
	while (ch < '0' || ch > '9') {
		if (ch == '-') f = -1;
		ch = getchar ();
	}
	while (ch >= '0' && ch <= '9') {
		x = x * 10 + ch - '0';
		ch = getchar ();
	}
	return x * f;
}
void write (int x) {
	if (x < 0) x = -x, putchar ('-');
	if (x >= 10) write (x / 10);
	putchar (x % 10 + '0');
}
int quickmod (int x, int y) {
	int Ans = 1;
	while (y) {
		if (y & 1) Ans = (Ans * x) % mod;
		x = (x * x) % mod;
		y >>= 1;
	}
	return Ans;
}
int n, m;
int a[100005];
vector <int> G[5];
int f[400005][5];
inline int get_val(int k, int x) {
    if(!x) return 0;
    if(x > (int)G[k].size()) return inf;
    return G[k][x-1];
}
vector <int> Lst[5];
void solve(int k2, int k, int l, int r, int L, int R) {
    if(l > r) return ;
    int mid = (l + r) / 2, Mid = L;
    f[Lst[k2][mid]][k] = inf;
    for(int i = L; i <= min(mid, R); i++) {
        int lst = mid - i;
        if(f[Lst[k2][i]][k-1] + get_val(k, lst) < f[Lst[k2][mid]][k]) {
            f[Lst[k2][mid]][k] = f[Lst[k2][i]][k-1] + get_val(k, lst);
            Mid = i;
        }
    }
    solve(k2, k, l, mid - 1, L, Mid), solve(k2, k, mid + 1, r, Mid, R);
}
signed main () {
//	freopen (".in", "r", stdin);
//	freopen (".out", "w", stdout);
	n = read(), m = read();
    int bas = m % 5;
    m -= bas;
    for(int i = 1; i <= n; i++) {
        a[i] = read();
        G[5-a[i]%5].push_back(a[i]);
    }
    for(int i = 0; i < 5; i++) {
        sort(G[i].begin(), G[i].end());
        for(int j = 1; j < (int)G[i].size(); j++) G[i][j] += G[i][j-1];
    }
    f[0][0] = 0;
    for(int i = 1; i <= 4 * n; i++) f[i][0] = inf;
    for(int i = 1; i < 5; i++) {
        // for(int j = 0; j <= 4 * n; j++) {
        //     f[j][i] = inf;
        //     for(int k = 0; k <= j; k++) {
        //         int lst = (j - k + (i - 1)) / i;
        //         if(f[k][i-1] + get_val(i, lst) < f[j][i]) {
        //             f[j][i] = f[k][i-1] + get_val(i, lst);
        //         }
        //     }
        // }
        for(int j = 0; j < i; j++) Lst[j].clear();
        for(int j = 0; j <= 4 * n; j++) Lst[j%i].push_back(j);
        for(int j = 0; j < i; j++) solve(j, i, 0, (int)Lst[j].size() - 1, 0, (int)Lst[j].size() - 1);
    }
    int Ans = 0;
    for(int i = 0; i <= 4 * n; i++) if(f[i][4] <= m) Ans = i;
    write(Ans + bas), putchar('\n');
	return 0;
}
/*
5 57
9 14 31 18 27
*/

詳細信息

Test #1:

score: 100
Accepted
time: 2ms
memory: 3424kb

input:

5 57
9 14 31 18 27

output:

8

result:

ok answer is '8'

Test #2:

score: -100
Wrong Answer
time: 2ms
memory: 3524kb

input:

4 50
11 11 11 11

output:

16

result:

wrong answer expected '12', found '16'