首页 > 其他分享 >牛客小白月赛71 补题记录

牛客小白月赛71 补题记录

时间:2023-04-22 09:13:18浏览次数:52  
标签:友善 int ll cin long 牛客 补题 71 猫猫

AB:
C:
可以转化为比较对数,然后直接模拟即可(long double 128位 表示范围\(-1.2 \times 10^{-4932}~1.2 \times 10^{4932}\))
代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//------------------------
int main(void)
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	ll p, q;
	cin>>p>>q;
	long double M=logl(1e18);
	int n=2;
	while(++n){
		long double t=logl(p)*q;
		if(t-M>0) break;
		long long tem=pow(p, q);
		p=q;
		q=tem;
	}
	cout<<n-1<<endl;
	return 0;
}

D:
tricks: 一共有两个属性,每个物品都有这两个属性,有两组物品,可以建立一个二维坐标系,来观察一下

  • 猫猫的友善值作为横坐标,期望友善值作为纵坐标
  • 主人的期望友善值作为横坐标,友善值作为纵坐标
  • 将猫猫按照友善值从小到大排序,主人按照期望友善值从小到大排序。要求的答案就是对于每个猫猫,它的左上部分的主人的友善值的最大值。具体来说就是:遍历每一个猫猫,用指针遍历的方式遍历主人,取主人友善值的最大值,然后离线更新猫猫的答案
    代码如下:
#include <bits/stdc++.h>
using namespace std;
struct node{
	int x, y, id;
};
bool cmp(node a, node b){
	return a.x<b.x;
}
int main(void)
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int n, m;
	cin>>n>>m;
	vector<node> a(n), b(m);
	for(int i=0; i<n; i++) cin>>a[i].x;
	for(int i=0; i<n; i++) cin>>a[i].y;
	for(int i=0; i<n; i++) a[i].id=i;
	for(int i=0; i<m; i++) cin>>b[i].y;
	for(int i=0; i<m; i++) cin>>b[i].x;
	sort(a.begin(), a.end(), cmp);
	sort(b.begin(), b.end(), cmp);
	vector<int> ans(n);
	int mx=-1, last=0;
	for(int i=0; i<n; i++){
		while(last<m && b[last].x<=a[i].x){
			mx=max(mx, b[last].y);
			last++;
		}
		if(mx>=a[i].y) ans[a[i].id]=mx;
		else ans[a[i].id]=-1;
	}
	for(int i=0; i<n; i++){
		cout<<ans[i]<<" ";
	}
	cout<<endl;
	return 0;
}

E:

  • a=b
    • a=b=1,print 1
    • a=b \(\neq\) 1 print 0
  • a \(\neq\) b
    • WLOG b>a,根据更相减损之术,有:
    • \[gcd(a+c, b+c) = gcd(a+c, b-a) = d \neq 1 \]

    • 因此,枚举每一个b-a的因子d(可在\(O(\sqrt n)\)内完成),\(O(1)\) 算出使得\(d \mid a+c\)的最小c(具体来说就是, \((d-a\%d)\%d\) )

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll calc(ll a, ll d)
{
	return (d-a%d)%d;
}
int main(void)
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	ll a, b;
	cin>>a>>b;
	if(a==b){
		if(a==1) cout<<1<<endl;
		else cout<<0<<endl;
		return 0;
	}
	if(a>b) swap(a, b);
	ll tem=b-a;
	ll ans=-1;
	for(ll i=1; i<=(ll)sqrt(tem); i++){
		if(tem%i==0){
			if(i!=1){
				ll t=calc(a, i);
				if(ans==-1) ans=t;
				else ans=min(ans, t);
			}
			if(tem/i != 1){
				ll t=calc(a, tem/i);
				if(ans==-1) ans=t;
				else ans=min(ans, t);
			}
		}
	}
	cout<<ans<<endl;
	return 0;
} 

标签:友善,int,ll,cin,long,牛客,补题,71,猫猫
From: https://www.cnblogs.com/JustACommonMan/p/17342418.html

相关文章

  • day52 300.最长递增子序列 | 674. 最长连续递增序列 | 718. 最长重复子数组
    给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是[2,3,7,101......
  • 小白月赛71
    C.猫猫与数列可以猜测,答案应当很小,所以可以直接暴力判断最大的n首先我们可以走两种路:第一种,利用求对数来比较,注意精度问题即可,但我感觉这里的快速幂会溢出嘛?while(1){ a=qpow(x,y); if(y*log(x)>log(maxm)+1e-5)break; ++c; x=y;y=a;}cout<<c<<"\n";第二种做法,快速幂......
  • 华中农业大学2023年十二届程序设计竞赛(补题)
    题目地址B.写信题意:有n个信封和n封信,问全部装错有多少种可能Solution全错排问题,对于i=k的情况,我们可以从i=k-1和i=k-2转移过来一种是k-1个全错排,然后从前面k-1个选出一个信封与第k个交换另一种是任选一个j,有1<=j<=k-1放在k,这样除了k和j以外还有k-2个数进行全错位排列,这样我......
  • [牛客]链表分割
    编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前。牛客链接最简单思路因为头插必然改变顺序,所以使用尾插大于的尾插到一个链表小于的尾插到一个链表然后链接起来使用哨兵位的头结点,防止太多问题的产生/*structListNode{intval;struc......
  • 力扣---1071. 字符串的最大公因子
    对于字符串s和t,只有在s=t+...+t(t自身连接1次或多次)时,我们才认定“t能除尽s”。给定两个字符串str1和str2。返回最长字符串x,要求满足x能除尽str1且X能除尽str2。示例1:输入:str1="ABCABC",str2="ABC"输出:"ABC"示例2:输入:str1="ABABAB",str2=......
  • 牛客动态规划1选做
    [NOIP2002]过河卒题目链接进行记忆化搜索,然后强制把马所在的点和控制的点赋值为0#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;set<pair<int,int>>st;intf[25][25];intcalc(intx,inty){if(x==0&&y==0)returnf[x][y]=1......
  • [PLC]三菱Q系列MODBUS通信(QJ71C24N串口模块)
    三菱Q系列MODBUS通信(QJ71C24N串口模块)CPUQ01通信模块:QJ71C24N通信协议:MODBUSRTU编程软件:GXWORK2 打开GXWORK2,新建工程,然后右键点击智能功能模块 安装位置根据硬件实际情况设定,此处注意起始XY地址,后面会用到。     双击开关设置 CH2设置如下,通信协议......
  • P1271 【深基9.例1】选举学生会
    【深基9.例1】选举学生会题目描述学校正在选举学生会成员,有\(n\)(\(n\le999\))名候选人,每名候选人编号分别从\(1\)到\(n\),现在收集到了\(m\)(\(m\le2000000\))张选票,每张选票都写了一个候选人编号。现在想把这些堆积如山的选票按照投票数字从小到大排序。输入格式输入\(n......
  • xor (牛客多校) (线性基+ 线段树)
      思路:问xor起来有没有某个值,想到线性基然后发现问L-R区间的集合都要表示x,利用线性基的交集解决在利用线段树解决区间问题 #include<iostream>usingnamespacestd;typedefunsignedintui;constintmaxn=50005;structL_B{//线性基结构体ui......
  • 归档 230418 // 补题
    凳子充分地让我切身实地地体会到了平行四边形的不稳定性。做题的时候可以360°无死角地把下半身转来转去,有点意思。也有点容易摔(×A.两双手http://222.180.160.110:1024/contest/3506/problem/1不难发现可以通过解二元一次方程组得到用几个A操作和B操作才能让横纵坐标分......