NIYAXIMEN

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  13 随笔 :: 0 文章 :: 0 评论 :: 238 阅读

菜鸡刷题比赛日记之数学知识相关
[https://codeforces.com/contest/2007/problem/C](C. Dora and C++)
这题包含加A和加B,此处应该先考虑特殊情况a=b,若不进行如何操作的话,初始答案应该是res=a[n]-a[1](排序之后),然后进行操作,想想该如何最小化极差。为了便于计算,先将数组中每个数字先mod a,因为对于任意的a[n]-a[i],一定可以通过操作将这个差值缩小到[0,a-1],等价于都mod a
归一化之后再考虑如何进行操作,对于目前排序后的数组,0<= qi <= a-1 此时设初始的res = q[n] - q[1],从前往后遍历,显而易见将某个数加上a之后就变成了max。q[1]+a,res=min(res,q[1]+a-q[2]),只可以是q[2]作为目前的最小值,而后从前往后遍历2-n res=min(res,q[i]+a-q[i-1])把前面的数字都加上a之后便可以将q[i-1]设置为最小值

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;

int gcd(int a,int b)
{
	return b? gcd(b,a%b):a;
}

void solve()
{
	int n,a,b;scanf("%d%d%d",&n,&a,&b);vector<int>q;
	int d=gcd(a,b);
	for(int i=1;i<=n;i++)
	{
		int x;cin>>x;
		q.push_back(x%d);
	}
	sort(q.begin(),q.end());
	int ans=q[n-1]-q[0];
	for(int i=1;i<n;i++)
	{
		ans=min(ans,q[i-1]+d-q[i]);
	}
	cout<<ans<<endl;
}
int main()
{
	int t;cin>>t;
	while(t--)
	{
		solve();
	}
}
[https://codeforces.com/contest/1993/problem/C](C. Light Switches) 考虑到每个灯的开关是以2k为一个周期,本质便是n个周期函数的最小正整数解,ans显然应该>=最晚开灯的时间,记为mx,再把每个时间mod 2k之后放入数组之中,设置一个cnt数组来统计该位置的灯(偷摸里?)的数量,遍历整个周期,先加上半个周期的灯数量,再每次开始每次移动一,加上cnt[i]同时减去关灯的个数,若一个周期过后还没有全开则无解,解集可能延续到下个周期,如下图![](https://img2024.cnblogs.com/blog/3512238/202408/3512238-20240831091458564-1264191474.jpg)
点击查看代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a[N];
typedef pair<int,int> PII;
int main()
{
	int t;cin>>t;
	while(t--)
	{
		int n,k;scanf("%d%d",&n,&k);int mx=-1;
		int d[2*k+1]={0};
		for(int i=1;i<=n;i++)
		{
			int x;scanf("%d",&x);
			int u=x%(2*k);
			d[u]++;
			mx=max(mx,x);
		}
		int cnt=0;int ans=0x3f3f3f3f;
		for(int i=0;i<=k-2;i++)cnt+=d[i];
		for(int l=0,r=k-1;l<=2*k;l++,r++)
		{
			if(r==2*k)r=0;
			cnt+=d[r];
			if(cnt==n)
			{
				int op=(r-mx)%(2*k);
				if(op<0)op+=2*k;
				ans=min(ans,mx+op);
			}
			cnt-=d[l];
		}
		if(ans==0x3f3f3f3f)cout<<"-1"<<endl;
		else cout<<ans<<endl;
	 } 
}
posted on   AsukaAlice  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示