Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <queue>
- #include <list>
- #include <climits>
- #include <string>
- #include <stack>
- #include <map>
- #include <set>
- #include <cmath>
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <sstream>
- #include <iomanip>
- #define ALL(v) v.begin(), v.end()
- #define REP(i, a, b) for(int i = a; i < b; i++)
- #define REPD(i, a, b) for(int i = a; i > b; i--)
- #define REPLL(i, a, b) for(ll i = a; i < b; i++)
- #define FOR(i, a, b) for(int i = a; i <= b; i++)
- #define FORD(i, a, b) for(int i = a; i >= b; i--)
- #define FORLL(i, a, b) for(ll i = a; i <= b; i++)
- #define INF 1000000001
- #define vit vector<int>::iterator
- #define sit set<int>::iterator
- #define vi vector<int>
- #define vpii vector<pii >
- #define ll long long
- #define ld long double
- #define PB push_back
- #define MP make_pair
- #define pii pair<int, int>
- #define pld pair<ld, ld>
- #define st first
- #define nd second
- #define EPS 1e-9
- #define PI acos(-1.0)
- #define MAXN 10004
- #define MAXM 10005
- using namespace std;
- int z, n, m, t, c;
- vpii items;
- ll amuse[MAXN];
- int types[MAXM];
- int main()
- {
- cin >> z;
- FOR(tc, 1, z) {
- cin >> n >> m >> c;
- memset(types, 0, sizeof(types));
- memset(amuse, 0, sizeof(amuse));
- items.clear();
- REP(i, 0, n) {
- cin >> t;
- types[t]++;
- }
- FOR(i, 1, m) if(types[i]) {
- items.PB(MP(types[i], i));
- }
- sort(ALL(items));
- FORD(i, items.size()-1, 0) {
- amuse[i] = (i < n-1 ? amuse[i+1] : 0) + (items[i].nd*items[i].nd)%c;
- }
- int i = 0;
- ll ret = 0;
- FOR(h, 1, n) {
- while(i < items.size() && items[i].st < h) i++;
- if(i == items.size()) break;
- ret = max(ret, h*(amuse[i]));
- }
- cout << "Case " << tc << ": " << ret << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement