首页 > 其他分享 >P9311 [EGOI2021] Twin Cookies / 姐妹分饼干 题解

P9311 [EGOI2021] Twin Cookies / 姐妹分饼干 题解

时间:2024-12-15 13:32:17浏览次数:5  
标签:Cookies 饼干 int 题解 long P9311 break 美味

题目传送门/AC record

思路

考虑随机化,前 \(100\) 次订单的美味值随机生成,最后一次的 \(n\) 个美味值为前 \(100\) 次送到的饼干中的任意三个饼干的美味值之和,此时的组合方案数去重后也远大于 \(n\),故可以通过。

选取饼干和最后的分配直接暴力计算就行,判重可以用 map

代码

#include<bits/stdc++.h>
using namespace std;
const long long mod=1e16;
map<long long,bool>a;
int n;
long long f[114];
long long d[5145],l;
int main() {
	srand(time(0));
	cin>>n;
	for(int i=1;i<=100;i++) {
		for(int j=1;j<=n;j++) {
			long long k=rand()*rand()*rand();//生成随机美味值
			k=abs(k)%mod+1;
			while(a[k]) {
				k=rand()*rand()*rand();
				k=abs(k)%mod+1;
			}
			a[k]=true;
			d[j]=k;
		}
		cout<<"? ";
		for(int j=1;j<=n;j++)cout<<d[j]<<" ";
		cout<<endl;
		cin>>f[i];
	}
	for(int i=1;i<=100;i++) {
		for(int j=i+1;j<=100;j++) {
			for(int x=j+1;x<=100;x++) {
				long long k=f[i]+f[j]+f[x];
				if(k>mod||a[k])continue;//记得判断k>10^16的情况
				a[k]=true;
				d[++l]=k;
				if(l==n)break;
			}
			if(l==n)break;
		}
		if(l==n)break;
	}
	cout<<"? ";
	for(int i=1;i<=n;i++)cout<<d[i]<<" ";
	cout<<endl;
	cin>>l;
	for(int i=1;i<=100;i++) {
		for(int j=i+1;j<=100;j++) {
			for(int x=j+1;x<=100;x++) {
				long long k=f[i]+f[j]+f[x];
				if(k==l) {
					cout<<"! 1 3"<<endl;
					cout<<k<<endl;
					cout<<f[i]<<" "<<f[j]<<" "<<f[x]<<endl;
					return/*191981*/0;//华丽收尾 
				} 
			}
		}
	}
}

标签:Cookies,饼干,int,题解,long,P9311,break,美味
From: https://www.cnblogs.com/ni-ju-ge/p/18607897

相关文章

  • Java线程命名问题解决
    前言网上冲浪时刷到线程池的文章,想想看自己好像还没在实际场景中设置过线程名称,小小研究一下。研究过程默认命名创建的线程都会有自己的名字,如果不设置,程序会给线程默认的名字,如Thread-0Threadt=newThread(()->{System.out.println(Thread.currentThread().getNam......
  • 牛客周赛 Round 71 题解 更新至 F 题
    Preface随便v的一场,这场难度不高呢,感觉有些小水,不如前面几场的难度,反而字符串那题更难一些。我会在代码一些有必要的地方加上注释,签到题可能一般就不会写了.以下是代码火车头:#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<vector>......
  • [AGC029D] Grid game题解
    这题很显然可以用贪心来解。由于先手不动一定会让局数更少,所以先手要能动就动。而后手一定是希望他的石子可以撞到一个障碍物上,这样先手就无法移动了,后手就可以让局数更少。因为先手一定会能动就动,所以后手只能走到横坐标大于纵坐标的障碍物上方。那就很简单了,我们只需要统计符......
  • P11378[GESP202412 七级]燃烧 题解
    闲话花了一个小时。主要原因:条初始值硬控我半小时,题目看错硬控我半小时(悲)。正文看题目,就是求从哪个点出发所得到的所有单调下降序列的总长度最长(这个描述好奇怪,不过意思是对的)。题目中说的是树,但其实可以当做图来做,因为题目中提到的是“节点”,而与父亲儿子节点无关,也就是说儿......
  • P6474 [NOI Online #2 入门组] 荆轲刺秦王 题解
    荆轲将会臭名昭著首先$15$做法很简单,那就是直接`cout<<-1`考虑用BFS来解思路很简单,但是怎么求每个士兵的控制范围呢?直接暴力时间复杂度是$O(nma^2)$当然过不了一定会TLE。所以,只需要差分+前缀和即可。说起来简单,实现起来也简单。然后,单打广搜大家应该都会了,可是出题......
  • AT_kupc2019_g ABCのG問題题解
    这题的难度不怎么好说,不过我认为还是挺简单的。我们可以把答案看成由多个子图构成的图,这样我们只需要手打一个小子图,从中推出完整的答案。-把小于子图范围的地方填上子图的字母-如果这个点的横坐标或纵坐标小于子图范围就填上$T_{i,0}$或$T_{0,j}$详见注释intmain(){......
  • [BZOJ3811] 玛里苟斯 题解
    不得不说这题的确挺苟的。注:下述“引理”表示:对于长度为\(n\)的数组\(V\),其线性基为\(B\),定义\(c_v=\bigoplus\limits_{a\inv}a\),\(num_k=\sum\limits_{v\subseteqV}[c_v=k]\),则\(\forallk\in\mathbb{N},num_k\in\{0,2^{n-|B|}\}\)。对于\(k=1\)的情况,容易想到按......
  • 机载电脑通过TypeC连接Pixhawk 6c (PX4)后的状态确认及问题解决
    在三个终端依次运行命令查看连接状态roscoeroslaunchmavrospx4.launchrostopicecho/mavros/state1.运行mavrospx4.lauch时udp1报错“networkisunreachable”原因:网关未设置解决方法:先通过使用route命令查看默认ip,发现网关未设置,再通过以下命令设置网关:sudorout......
  • 【决策单调性】P3648 [APIO2014] 序列分割 题解
    题目链接:P3648[APIO2014]序列分割(注:由于本题解的状态转移方程需要用到\(k\),所以原题中的\(k\)对应本题解中的\(m\)。)给你一个长度为\(n\)的序列\(A_1,A_2,...,A_n\),一开始把它看作一个块。初始你的分数为\(0\),现在你需要进行下列操作恰好\(m\)次:选一个块,并从一处......
  • ARC132E题解
    简要题意有\(n\)个方块,每个方块有一个初始状态可能为左右或者空。每次操作随机选择一个空进行操作。每次操作可以向左或者向右走一直到下一个空或者走出边界,走到的每个格子会变成左或者右,这取决于移动方向。求无法操作时方格为左的期望数。数据范围:\(n\le10^5\)。题解首先......