首页 > 其他分享 >YL 模拟赛总结 12

YL 模拟赛总结 12

时间:2024-03-02 17:24:28浏览次数:31  
标签:12 YL 奇数 int 31 个数 mid 偶数 模拟

Problem


T1

略。

T2

最理想的情况当然是奇偶交替,每个数单独成为一组。

考虑不理想的情况:

  • 偶数个数 \(>\) 奇数个数,此时需要可以先奇偶交替,再将最后剩下的偶数单独分为一组,答案为奇数个数 \(\times \ 2 +1\)。

  • 奇数个数 \(>\) 偶数个数,此时再分出两种情况:

    • 若奇数个数 \(-\) 偶数个数 \(\bmod \ 3 \neq 1\),则前面的可以两个奇数合为一个偶数、一个奇数单独一组,剩下的 \(0/2\) 个奇数合成偶数后分为一组,答案为剩下的奇数个数 \(+\ 1 \div 3\)。

    • 否则,剩下的前面奇数组成的的偶数组成一组,落单的奇数各组成一组,答案为剩下的奇数个数 \(\div \ 3 + 2\)。

#include<bits/stdc++.h>
using namespace std;

int n;
int a[1031],m[2];

int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i],m[a[i]%2]++;
	if(m[0]>m[1]) cout<<m[1]*2+1;
	else{
		int v=m[1]-m[0];
		if(v%3==1) v=v/3+2;
		else v=(v+1)/3;
		cout<<m[0]+m[1]-v;
	}
	return 0;
}

T3

将牛棚高度按照高度排序,从小到大考虑每一个牛棚。

先预处理第 \(i\) 个牛棚能装下的奶牛数量 \(cnt_i\)。

每一个牛棚的对于答案的贡献即为 \(cnt_i-(i-1)\)。

#include<bits/stdc++.h>
using namespace std;

int n;
bool vis[31];
long long ans;
long long a[31],b[31],t[31];
int cnt[31];

namespace sol2{
    void solve(){
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
        for(int i=1;i<=n;i++) cin>>b[i];
        sort(b+1,b+n+1);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++) cnt[i]+=(a[j]<=b[i]);
        ans=1;
        for(int i=1;i<=n;i++) ans*=(cnt[i]-i+1);
        cout<<ans;
    }
}

int main(){
    sol2::solve();
    return 0;
}

T4

答案显然具有单调性,考虑二分。

首先可以根据题意建出一张无向图。

为了排序,\(a_i\) 必须与 \(i\) 在一个连通块中。

所以在 check 函数中进行 dfs 求出连通块并判断即可。

#include<bits/stdc++.h>
using namespace std;

int n,m;
int l,r,mid,maxr=-1e9;
int a[100031];
struct EdgeInfo{
	int r;
	vector<pair<int,int> > e;
}G[100031];

void dfs(int x,int rr){
	if(G[x].r) return;
	G[x].r=rr;
	for(auto i:G[x].e)
		if(i.second>=mid)
			dfs(i.first,rr);
}
bool check(int x){
	for(int i=1;i<=n;i++) G[i].r=0;
	for(int i=1;i<=n;i++) dfs(i,i);
	for(int i=1;i<=n;i++)
		if(G[i].r!=G[a[i]].r)
			return 0;
	return 1;
}
bool p(int *x){
	for(int i=1;i<=n;i++)
		if(x[i]!=i) return 0;
	return 1;
}

int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	if(p(a)){ cout<<-1; return 0; }
	for(int i=1,u,v,w;i<=m;i++)
		cin>>u>>v>>w,
		G[u].e.push_back(make_pair(v,w)),
		G[v].e.push_back(make_pair(u,w)),
		maxr=max(maxr,w);
	l=0,r=maxr+1;
	while(l+1<r){
		mid=(l+r)>>1;
		if(check(mid)) l=mid;
		else r=mid;
	}
	cout<<l;
	return 0;
}

标签:12,YL,奇数,int,31,个数,mid,偶数,模拟
From: https://www.cnblogs.com/XOF-0-0/p/18048922

相关文章

  • YL 模拟赛总结 10
    ProblemT1二分板子。对于\(c_i\)降序排序,然后二分\(h\)指数,在check中贪心地使用综述增加引用次数即可。T2通过观察可以发现,在一篇论文的贡献列表中,若某一位置出现了比它前面的名字的字典序更小的情况,则说明从这个位置开始,后面的人的资历一定\(\ge\)前面的人。根据......
  • YL 模拟赛总结 9
    ProblemT1我们考虑一种贪心策略:对于价格前\(n-1\)小的咖啡,我们求出一种最优方案使得按照此方案买完咖啡后钱数\(\ge20\)且最接近\(20\)。至于如何求出最优方案,进行一遍01背包即可。#include<bits/stdc++.h>usingnamespacestd;intn,k;inta[1031],dp[1031];i......
  • YL 模拟赛总结 6
    ProblemT1为了方便处理,我们令男生为\(1\),女生为\(-1\)。求一遍前缀和\(sum\),若存在两个下标\(l,r\)使得\(sum_l=sum_r\),则说明区间\([l+1,r]\)的和为\(0\),即男女人数相等。在这样的区间中取长度最大的即可。需要特殊处理\(sum_0\)。#include<bits/stdc++.h>#defi......
  • YL 模拟赛总结 7
    ProblemT1预处理出前\(10^4\)个格子需要填什么数,然后输出即可。具体地,我们记录\(e\)为当前层数,\(o\)为上一层的最后一个的位置,\(last\)为上一个填的格子的位置。我们知道,一个格子要么在一层的起点,要么在一层的中间,要么在一层的末尾。枚举\(1\sim5\)分别对这三种情......
  • YL 模拟赛总结 11
    ProblemT1略。T2略。T3结论题。令所有牛的最终饥饿值为\(x\),则分别对于每一头牛进行考虑:对于第一头牛,它需要的最少玉米袋数为\(h_1-x\);对于第二头牛,它单独需要的最少玉米袋数为\(h_2-x\),而第一头牛已经用了\(h_1-x\)袋玉米,因此它需要的最少玉米袋数为\(h_2-x-......
  • 解决Puppeteersharp 被检测到的方法, 顺带学习了js如何实现 模拟点击拖动事件
    varlaunchOptions=newLaunchOptions{Headless=false,DefaultViewport=null,IgnoreHTTPSErrors=true,ExecutablePath=path+"\\.local-chromium\\chrome-win\\chr......
  • 问题:模拟qq自动登录时候截不到验证码图片
    -超级鹰-注册:普通用户-登录:普通用户-题分查询:充值-创建一个软件(id)-下载实例代码-下载核心代码利用超级鹰进行图片验证的模拟登录fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeysfromsele......
  • SC5312A SC5313A丨IQ解调器
    产品简介:300MHz至6GHz的直接IQ解调器更多信息请加weixin-pt890111获取 SC5312A和SC5313A是300MHz至6GHz的直接IQ解调器,将RF直接下变频为模拟同相和正交IF或IQ基带。直流耦合差分IQ对可馈送到任何双通道数字转换器进行模数转换。本地振荡器(LO)由外部源(如分别为SC5505A和SC......
  • SC5412A ,SC5413A|IQ调制器
    产品简介:调制信号带宽400MHz到6GHz、直流160MHz基带信号更多信息请加weixin-pt890111获取SC5413A和SC5412A是400MHz至6GHz直接IQ调制器,可将模拟同相和正交IF或IQ基带直接上变频至RF。每个模块也可以作为单级上变频器运行。直流耦合差分IQ对可以由任何双通道基带源驱动,例如......
  • 牛客练习赛122 (小白登山记)
    A.黑白配思路:n个学生手心和手背分为2个组求出他们的差直接按题意写即可Code:#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,m;cin>>n>>m;for(inti=0;i<n;++i){intcnt1=0,cnt0=0;for(intj=0......