社区讨论

求hack

P13061[GCJ 2020 #1C] Oversized Pancake Choppers参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@migx1165
此快照首次捕获于
2025/11/27 12:10
3 个月前
此快照最后确认于
2025/11/28 17:15
3 个月前
查看原帖
RT。我也不知道那里错了,就是过不去 subtask 2 的 #35 个测试点。(而且subtask3 过了)
思路就是先二分找到上界,然后按照 aij\frac {a_i}j 分类,然后按照w从小到大选。
求大佬 hack.
代码CPP
#include <bits/stdc++.h>
#define int long long
#define ld long double
#define ull unsigned long long
#define rep(i, n) for (int32_t i = 1; i <= (n); ++i)
#define re0d(i, n, d) for (int i = 0; i <= (n); i += d)
#define reb(i, n) for (int i = 0; i < (n); ++i)
#define re0(i, n) for (int i = 0; i <= (n); ++i)
#define re2(i, n) for (int i = 2; i <= (n); ++i)
#define lop(i, n) for (int i = (n); i; --i)
#define lob(i, n) for (int i = (n); ~i; --i)
#define hh(i, a, b) for (int i = (a); i <= (b); ++i)
#define pb push_back
#define eb emplace_back
#define mem(a, b) memset(a, b, sizeof a)
#define cpy(a, b) memcpy(a, b, sizeof a)
#define ppct __builtin_popcount
#define pii pair<int, int>
#define X first
#define Y second
#define FILEIN(s) freopen(s ".in", "r", stdin)
#define FILEOUT(s) freopen(s ".out", "w", stdout)
#define FILE(s) FILEIN(s), FILEOUT(s)
#define ls rt << 1
#define rs rt << 1 | 1
#define lson l, m, ls
#define rson m + 1, r, rs
#define mod wqx
#define prq priority_queue
#define pair32 pair<int32_t, int32_t>
#define mkp make_pair
#define lb lower_bound
using namespace std;
int INDEX__;
const int mod = (29ull<<57)+1;
const __int128 inv=(mod+1)/2;
void cmax(int &a, int b)
{
	if (a < b)
		a = b;
}
void cmin(int &a, int b)
{
	if (a > b)
		a = b;
}
double Time() { return 1. * clock() / CLOCKS_PER_SEC; }
void Add(int &a, int b) { (a += b) %= mod; }
void Del(int &a, int b)
{
	(a -= b % mod) %= mod;
	(a += mod) %= mod;
}
int p2w(int a) { return a * a; }
int qp(int a, int b = mod - 2)
{
	int s = 1;
	a %= mod;
	for (; b; b >>= 1, (a *= a) %= mod)
		if (b & 1)
			(s *= a) %= mod;
	return s;
}
const int N = 10005, INF = 1e18;
struct clearablearray
{
	int a[N], col[N];
	int &operator[](int x)
	{
		if (col[x] != INDEX__)
			col[x] = INDEX__, a[x] = 0;
		return a[x];
	}
};
int n,a[N],D,tot;
bool check(int mid){
	__int128 now=0;
	rep(i,n)now+=a[i]/mid;
	return now>=D;
}
map<int,int>mp;
vector<int>wtf[N*50];
int solve()
{
	cin>>n>>D;
	rep(i,n)cin>>a[i];
	int l=1,r=360e9,ans=0;
	while(l<=r){
		int mid=(l+r)>>1;
		if(check(mid))l=mid+1,ans=mid;
		else r=mid-1;
	}
	rep(i,n){
		rep(j,D){
			int x=a[i]/j;
			if(x>ans)continue;
			if(!mp[x])mp[x]=++tot;
			if(x*j==a[i])
			wtf[mp[x]].pb(j);
		}
	}
	int anss=D-1;
	rep(i,tot){
		sort(wtf[i].begin(),wtf[i].end());
		int res=D,kill=0;
		for(int v:wtf[i]){
			if(v<=res)res-=v,kill++;
		}
		wtf[i].clear();
		anss=min(anss,D-kill);
	}
	// if(INDEX__==35)cout<<"Case #"<<INDEX__<<": "<<anss/10<<' '<<anss/10<<'\n';
	// else 
	cout<<"Case #"<<INDEX__<<": "<<anss<<'\n';
	mp.clear();tot=0;
	return 0;
}
main()
{
	// FILE("txt");
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int T = 1;
	cin >> T;
	while (T--)
		++INDEX__, solve();
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...