首页 > 其他分享 >2024/9/24

2024/9/24

时间:2024-09-24 13:26:00浏览次数:6  
标签:24 ch int tr mid 2024 pa buf

P1314 聪明的质检员

来翻历届真题,发现这道题还没过。

首先瞪眼可知 \(y\) 具有单调性,所以想到二分。

先不考虑 \(check\) 函数,把过程写了。

这道题和常规二分不同,因为要考虑绝对值,所以需要对 \(mid\) 分正负两种情况考虑。

然后在纸上画了画,基本定型以后开始写。写了 15min 以后发现挂了,动态查错 20min 发现我 \(l\) 赋值成了 \(ch(mid)\),人才啊。

对于 \(check\) 函数的话我想到了教主的魔法,但是看了看数据范围好像只有 70。于是想到每次要查询的数是唯一的,所以完全可以离线以后 \(\mathcal{O}(n)\) 预处理前缀和。

然后就过了。

点击查看代码
#include<bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
#define int long long							
using namespace std;
// using namespace  __gnu_pbds;
// tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> tr;//从小到大
// int findnum(int k){auto it=tr.find_by_order(k-1);return ((it!=tr.end())?(*it):1e9+7);}//查元素
// int findrank(int x){return tr.order_of_key(x)+1;}//查排名
// static char buf[100000],*pa=buf,*pd=buf;
// #define gc pa==pd&&(pd=(pa=buf)+fread(buf,1,100000,stdin),pa==pd)?EOF:*pa++ 
inline int read()
{
	int w=1,s=0;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
	while(isdigit(ch)){s=s*10+(ch-'0');ch=getchar();}
	return w*s;
}
const int maxn=3e6;
const int mod=998244353;
const int inf=1e9+7;
int n,m,s;
struct no
{
	int w,v; 
}a[maxn];
struct Ask
{
	int l,r;
}q[maxn];
int sum1[maxn],sum2[maxn];
int ch(int x)
{
	for(int i=1;i<=n;i++)
	{
		if(a[i].w>=x)sum1[i]=sum1[i-1]+1,sum2[i]=sum2[i-1]+a[i].v;
		else sum1[i]=sum1[i-1],sum2[i]=sum2[i-1];
	}
	int ans=0;
	for(int i=1;i<=m;i++)
	{
		int l=q[i].l,r=q[i].r;
        ans=(ans+(sum2[r]-sum2[l-1])*(sum1[r]-sum1[l-1]));
	}
	return ans;
}
signed main()
{
#ifdef Lydic
	freopen(".in","r",stdin);
	freopen(".out","w",stdout);
#endif
	cin>>n>>m>>s;
	for(int i=1;i<=n;i++)a[i]={read(),read()};
	for(int i=1;i<=m;i++)q[i]={read(),read()};
	int l=0,r=2e6,mid;
	int ans=inf;
	// for(int i=1;i<=10000;i++)ans=min(ans,abs(ch(i)-s));
	// cout<<ans<<endl;
	// return 0;
	while(l<r)
	{
		mid=(l+r)>>1;
		int del=ch(mid)-s;
		if(del==0)break;
		if(del>0)
		{
			int pre=ch(mid-1)-s,nxt=ch(mid+1)-s;
			if(pre==0){mid=pre;break;}
			if(nxt==0){mid=nxt;break;}
			if(pre>0&&nxt>0){l=mid+1;continue;}
			if(pre>0&&nxt<0){mid=(-nxt>del?mid:mid+1);break;}
		}
		else if(del<0)
		{
			int pre=ch(mid-1)-s,nxt=ch(mid+1)-s;
			if(pre==0){mid=pre;break;}
			if(nxt==0){mid=nxt;break;}
			if(pre<0&&nxt<0){r=mid-1;continue;}
			if(pre>0&&nxt<0){mid=(pre>-del?mid:mid-1);break;}
		}
		// cout<<l<<' '<<r<<endl;
	}
	cout<<abs(ch(mid)-s);
    return 0;
}

P2129 L 国的战斗续之多路出击

很水的绿题。

模拟的话会超时。

然后想到一句著名的话“如果大山不能走向穆罕默德,那么穆罕默德可以走向大山。”

于是每次操作直接平移坐标系即可。

点击查看代码
#include<bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
#define int long long							
using namespace std;
// using namespace  __gnu_pbds;
// tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> tr;//从小到大
// int findnum(int k){auto it=tr.find_by_order(k-1);return ((it!=tr.end())?(*it):1e9+7);}//查元素
// int findrank(int x){return tr.order_of_key(x)+1;}//查排名
// static char buf[100000],*pa=buf,*pd=buf;
// #define gc pa==pd&&(pd=(pa=buf)+fread(buf,1,100000,stdin),pa==pd)?EOF:*pa++ 
inline int read()
{
	int w=1,s=0;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
	while(isdigit(ch)){s=s*10+(ch-'0');ch=getchar();}
	return w*s;
}
const int maxn=6e5;
const int mod=998244353;
const int inf=1e9+7;
struct no
{
	int x,y;
}t[maxn];
int a[maxn],b[maxn];
int n,m;
char c[maxn];
int sx=1,sy=1,tx,ty;
signed main()
{
#ifdef Lydic
	freopen(".in","r",stdin);
	freopen(".out","w",stdout);
#endif
	cin>>n>>m;
	for(int i=1;i<=n;i++)t[i]={read(),read()};
	for(int i=1;i<=m;i++)
	{
		cin>>c[i];
		if(c[i]=='m'){a[i]=read();b[i]=read();}
	}
	for(int i=m;i>=1;i--)
	{
		if(c[i]=='y')sy*=-1,ty*=-1;
		else if(c[i]=='x')sx*=-1,tx*=-1;
		else if(c[i]=='m')tx+=a[i],ty+=b[i];
	}
	for(int i=1;i<=n;i++)printf("%lld %lld\n",t[i].x*sx+tx,t[i].y*sy+ty);
    return 0;
}

P2212 [USACO14MAR] Watering the Fields S

按照题意建图以后跑 MST,然后一遍过了。

P10460 防线

第一眼看题上说 <10^8 以为能暴力。

很有用的思想。

根据题意数列中只有一个奇数。我们可以根据只有一个奇数的数列和为奇数这个性质来判断这个数字是否在某个数列中。

于是可以用二分查找实现这个过程。

那么对于 \(check\) 函数,我们现在需要实现查找数列和的功能。

有一个小学公式: \(项数=\frac{末项-首项}{公差}+1\),然后对于每个等差数列都做一次即可。

一遍过!

点击查看代码
#include<bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
#define int long long							
using namespace std;
// using namespace  __gnu_pbds;
// tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> tr;//从小到大
// int findnum(int k){auto it=tr.find_by_order(k-1);return ((it!=tr.end())?(*it):1e9+7);}//查元素
// int findrank(int x){return tr.order_of_key(x)+1;}//查排名
// static char buf[100000],*pa=buf,*pd=buf;
// #define gc pa==pd&&(pd=(pa=buf)+fread(buf,1,100000,stdin),pa==pd)?EOF:*pa++ 
inline int read()
{
	int w=1,s=0;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
	while(isdigit(ch)){s=s*10+(ch-'0');ch=getchar();}
	return w*s;
}
const int maxn=2e6;
const int mod=998244353;
const int inf=1e9+7;
int T;
int n;
struct no
{
	int s,e,d;
}a[maxn];
int l,r;
int sum(int x)
{
	int num=0;
	for(int i=1;i<=n;i++)
	{
		if(a[i].s>x)continue;
		num+=(min(x,a[i].e)-a[i].s)/a[i].d+1;
	}
	return num;
}
bool ch(int x,int y)
{
	return ((sum(y)-sum(x-1))&1);
}
void Main()
{
	n=read();
	for(int i=1;i<=n;i++)a[i]={read(),read(),read()},l=min(l,a[i].s),r=max(r,a[i].e);	
	if(!ch(l,r))return puts("There's no weakness."),void();int ans=0;
	while(l<=r)
	{
		int mid=(l+r)>>1;
		if(ch(l,mid))r=mid-1,ans=mid;
		else l=mid+1;
	}
	cout<<ans<<' '<<sum(ans)-sum(ans-1)<<endl;
}
signed main()
{
#ifdef Lydic
	freopen(".in","r",stdin);
	freopen(".out","w",stdout);
#endif
	T=read();
	while(T--)Main();
    return 0;
}

标签:24,ch,int,tr,mid,2024,pa,buf
From: https://www.cnblogs.com/Lydic/p/18428937

相关文章

  • 2024年系统分析师考试大纲
    一、系统分析师系统分析师,属于计算机技术与软件(高级)专业技术资格。二、考试说明(一)考试目标通过本考试的合格人员应熟悉应用领域的业务,能分析用户的需求和约束条件,写出信息系统需求规格说明书,制订项目开发计划,协调信息系统开发与运行所涉及的各类人员;能指导制订企业的战略数据规划......
  • 2024年网络规划设计师考试大纲
    一、网络规划设计师网络规划设计师,属于计算机技术与软件(高级)专业技术资格。二、考试说明(一)考试目标通过本考试的合格人员应具备以下能力:1.熟悉所涉及的应用领域的业务。2.在网络安全法律法规和政策的指导下,能够依据网络技术的发展趋势进行计算机网络领域的需求分析、规划设计、部......
  • 20240919 湘潭夏令营
    Coin假设\(1\leqslantn\leqslant100\),可以想到去做一个矩阵乘法,记录一下每个位置到其他位置的概率。尝试算一下概率,可以发现每个位置到除了它以外的每一个位置的概率都是\(\frac{1}{2\times(n-1)}\),停留在原地的概率为\(\frac{1}{2}\)。但是可以发现,除了最初他在的......
  • 报表控件DevExpress Reports v24.1 —— 拥有可调整布局选项
    DevExpressReports提供了一个可调整的布局选项,允许您以最合适的方式安排、塑造和组织数据。其中一个这样的数据塑造选项是分组,可以在表报告的详细信息带内将数据安排在嵌套的多字段组中。在v24.1版本周期中引入了几个函数,它们允许您获取不同组元素的索引,这些新功能包括:CurrentR......
  • sicp每日一题[2.24-2.27]
    2.24-2.26没什么代码量,所以跟2.27一起发吧。Exercise2.24Supposeweevaluatetheexpression(list1(list2(list34))).Givetheresultprintedbytheinterpreter,thecorrespondingbox-and-pointerstructure,andtheinterpretationofthisasatree(as......
  • 第24篇 局域网内数据之间传输的方式
    在局域网内,各个电脑可以通过无线网卡进行接口数据的直接传输。以下是一些实现方法和注意事项:1.使用网络共享在局域网内建立一个文件共享服务,比如通过Windows的文件共享或Linux的Samba服务。各个电脑可以直接访问共享的文件或目录进行数据传输。2.使用Socket编程:可以编写应用程......
  • 【2024-09-23】篮友聚会
    23:59人类对自己的了解,宛如暗夜行路,要了解自己,就,需要他人的力量。                                              ——荣格周末,跟一群篮球爱好者大学校友聚会。这是我们第二......
  • MoNA:复用跨模态预训练模型,少样本模态的福音 | ICML'24
    跨模态转移旨在利用大型预训练模型来完成可能不属于预训练数据模态的任务。现有的研究在将经典微调扩展到跨模态场景方面取得了一定的成功,但仍然缺乏对模态差距对转移的影响的理解。在这项工作中,进行了一系列关于转移过程中源表示质量的实验,揭示了更大的模态差距与较少知识重用之......
  • 【2024最新】网络安全(黑客)自学,别再摆烂人生了!带你看看网络安全!
    当我们谈论网络安全时,我们正在讨论的是保护我们的在线空间,这是我们所有人的共享责任。网络安全涉及保护我们的信息,防止被未经授权的人访问、披露、破坏或修改。一、网络安全的基本概念网络安全是一种保护:它涉及保护我们的设备和信息,从各种威胁,如病毒和蠕虫,到更......
  • MX-NOIP 2024 模拟 3.5
    赠的场次,质量却很高。#3.5T1交换连状压都打的复杂度超劣,真是水平下降严重。其实也基本想到了,前面一大部分贪心确定,后面的做部分分状压dp。设\(f_s\)表示填了\(s\)集合,最优的\(n'\),\(g_s\)表示此时对应的\(n\)。枚举最高位填哪个数,转移比较简单。往前换的最大代价......