首页 > 其他分享 >Codeforces Round 857 (Div. 2)

Codeforces Round 857 (Div. 2)

时间:2023-03-12 14:22:05浏览次数:43  
标签:857 NO int Codeforces long ans Div define

题目链接

A

核心思路

读懂题目也就不难了。

// Problem: A. Likes
// Contest: Codeforces - Codeforces Round 857 (Div. 2)
// URL: https://codeforces.com/contest/1802/problem/A
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define NO {puts("NO") ; return ;}
#define YES {puts("YES") ; return ;}
#define endl "\n"
#define int long long 

void solve()
{
	int n;
	cin>>n;
	vector<int> a(n+1);
	int cnt_p=0,cnt_ip=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(a[i]>0)
		{
			cnt_p++;
		}
		else
		cnt_ip++;
	}
	for(int i=1;i<=cnt_p;i++)
	cout<<i<<" ";
	for(int i=1;i<=cnt_ip;i++)
	{
		cout<<cnt_p-i<<" ";
	}
	cout<<endl;
	for(int i=1;i<=cnt_ip;i++)
	{
		cout<<1<<" "<<0<<" ";
	}
	cnt_p-=cnt_ip;
	for(int i=1;i<=cnt_p;i++)
	cout<<i<<" ";
	cout<<endl;
}


signed main()
{
int t;
cin>>t;
while(t--)
{
	solve();
}
}

B

核心思路

这个的一个主要思想是首先如果我们遇到了2,也就是可以对雌雄分类。那么我们就可以在已经开辟的笼子里空出来几个笼子来给以后的兔子使用。

这里有一个很关键的地方,那就是需要统计兔子的总数,也就是需要划分奇数和偶数。如果是偶数那么就需要多占用一个笼子,比如:雌 雌 雌 雄。我们可以发现这个其实需要多占用一个笼子。

// Problem: B. Settlement of Guinea Pigs
// Contest: Codeforces - Codeforces Round 857 (Div. 2)
// URL: https://codeforces.com/contest/1802/problem/B
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define NO {puts("NO") ; return ;}
#define YES {puts("YES") ; return ;}
#define endl "\n"
#define int long long 

void solve()
{
	int n;
	cin >> n;
	vector<int> a(n + 1);
	//	int cnt_1 = 0;
	int ans = 0;
	for (int i = 1;i <= n;i++)
		cin >> a[i];
	int remain = 0;
	int cnt_1 = 0;
	for (int i = 1;i <= n;i++)
	{
		if (a[i] == 1)
		{
			if(remain>0)
			remain--;
			else
			ans++;
			cnt_1++;
		}
		else
		{
		//	cout<<cnt_1<<" "<<1<<endl;
			int t = (cnt_1 +1) / 2;
			remain = ans - t;
			if(cnt_1%2==0)
			remain--;
			//cout<<endl;
		//	cout << remain <<  " " << 0 << endl;
			//cout<<endl;
			//ans += cnt_1;
		//	cnt_1 = 0;
		}
	}
	// if (cnt_1)
	// {
		// //cout<<cnt_1<<endl;
		// ans += cnt_1;
	// }
	cout << ans << endl;
}


signed main()
{
	int t;
	cin >> t;
	while (t--)
	{
		solve();
	}
}

C

核心思路

这里学到一个种很新颖的做法。

就是先随机化我们的第一行和第一列。然后顺便把每个2*2的矩阵的异或值也随机化规定下。

接下来就是一行一行的递推就好了。

// Problem: C. The Very Beautiful Blanket
// Contest: Codeforces - Codeforces Round 857 (Div. 2)
// URL: https://codeforces.com/contest/1802/problem/C
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define NO {puts("NO") ; return ;}
#define YES {puts("YES") ; return ;}
#define endl "\n"
#define int long long 

 mt19937_64 rnd(random_device{}());
uniform_int_distribution<LL> dist(0, LLONG_MAX);

void solve()
{
	int n,m;
	cin>>n>>m;
	 vector<vector<LL> > a(n, vector<LL>(m));
	while(1)
	{
		for(int i=0;i<n;i++)
	a[i][0]=dist(rnd);
	
	set<int> s;
	for(int i=0;i<m;i++)
	a[0][i]=dist(rnd);
	int val=dist(rnd);
	for(int i=1;i<n;i++)
	{
		for(int j=1;j<m;j++)
		a[i][j]=val^a[i-1][j]^a[i][j-1]^a[i-1][j-1];
	}
	for(int i=0;i<n;i++)
	for(int j=-0;j<m;j++)
	s.insert(a[i][j]);
	if(s.size()==n*m)
	{
		cout<<n*m<<endl;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			cout<<a[i][j]<<" ";
			cout<<endl;
		}
		break;
	}
	}
	
}

signed main()
{
int t;
cin>>t;
while(t--)
{
	solve();
}
}

D

核心思路

这个题目首先得理清楚题目的意思,题目是要我们其中一个朋友只可以在第一家商店买东西,另外一个只可以在第二家商店买东西。并且在一个部门不可以同时为两个人同时买东西。

接下来就是发现性质的时候:我们可以知道如果我们选择了x作为第一个朋友的最大值,并且假设这个部门是i。那么之后在\([i+1,n]\)的部门里面。只要存在大于x的第二个就必须得买下来。这个等于是从千万后扫一遍,维护一个后缀的最大值。

但是我们需要注意我们也可以从\([1,i-1]\)个部门里面买,这个也是可以的。所以我们还需要维护一个前缀最大值。

然后我们既然想要两者相差最小,那么肯定得使用二分进行维护了。

// Problem: D. Buying gifts
// Contest: Codeforces - Codeforces Round 857 (Div. 2)
// URL: https://codeforces.com/contest/1802/problem/D
// Memory Limit: 512 MB
// Time Limit: 3000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define NO {puts("NO") ; return ;}
#define YES {puts("YES") ; return ;}
#define endl "\n"
#define int long long 

void solve()
{
	int n;
	cin>>n;
	vector<pair<int,int>> a(n);
	multiset<int> s1,s2;
	for(int i=0;i<n;i++)
	{
		cin>>a[i].first>>a[i].second;
		s2.insert(a[i].second);
	}
	sort(a.begin(),a.end());
	int ans=1e9;
	// for(auto c:s2)
	// cout<<c<<" ";
	// cout<<endl;
	for(int i=0;i<n;i++)
	{
		auto [x,y]=a[i];
		s2.erase(s2.lower_bound(y));
		if(!s2.empty())
		{
			int mx=*prev(s2.end());
			if(mx>=x)
			ans=min(ans,mx-x);
			else
			{
				ans=min(ans,x-mx);
				auto it=s1.lower_bound(x);
				if(it!=s1.end())
				ans=min(ans,*it-x);
				if(it!=s1.begin())
				ans=min(ans,x-*prev(it));
			}
		}
		else
		{
			auto it=s1.lower_bound(x);
			if(it!=s1.end())//如果等于说明没有比x大的
			ans=min(ans,*it-x);
			if(it!=s1.begin())//如果等于说明没有比x小的.
			ans=min(ans,x-*prev(it));
			
		}
		s1.insert(y);
	}
	cout<<ans<<endl;
}


signed main()
{
int t;
cin>>t;
while(t--)
{
	solve();
}
}

标签:857,NO,int,Codeforces,long,ans,Div,define
From: https://www.cnblogs.com/xyh-hnust666/p/17208107.html

相关文章

  • Codeforces比赛规则梳理
    1、排名div选手们按Rating以1700为界划分为Div.1和Div.2两类,Div.1的比赛较难,Div.1的ABC三题会和Div.2的CDE三题相同。每次比赛结束后Rating都会依据此前各个选手的Rating和......
  • Codeforces Round #666 (Div. 2)D. Stoned Game(博弈问题)
    problemT和HL玩游戏,n堆石头,玩家轮流在石堆中选择一个(但不能是上一个人取的那堆)取一个石子一旦有一方不能取石头则判输solution统计所有石头数,如果总数小于mx(最多石头的一堆)......
  • Codeforces Round 857 (Div. 2)
    更好的阅读第一次进入时加载缓慢,请耐心等待。赛时降智,菜是原罪。A.Likes简单题。#include<bits/stdc++.h>usingnamespacestd;intT,n,a[11111],s[11111];intm......
  • 练习记录-cf-div2-A-D
    上课的时候抓紧时间写的,状态不好,c也没过,估计换个环境也很难想吧ALikes题意点赞,a<0表示取消赞a>0表示增加赞,a数组乱序输出如何排让赞数价值最多分别记录大于0和小......
  • Codeforces Round 857 (Div. 2)(持续更新)
    Preface貌似CF的Div1/Div2分场就有1900的分界线,大号打不了Div2就很难受同时我对自己的水平有清晰的认知,现在打这种纯Div1的场肯定就是纯被虐,所以也不敢去Div1所以索性开......
  • Vue实现div可拖动组件 并可操纵盒子大小
    Vue实现div可拖动组件并可操纵盒子大小借鉴文章:https://blog.csdn.net/qq_46103732/article/details/128902192场景:在pc端项目中会碰到弹框后多个页面重叠的场景,类似......
  • vue動態產生div及v-model數據綁定
    html模板遍歷會涉及到v-model對值的綁定,這里的思路是根據數組中的下標尋找對應行數據<divclass="row"v-for="item,indexinitems"><divclass="col-3">......
  • CFR-857解题报告
    比赛传送门A.TheVeryBeautifulBlanket题意:构造一个\(n\timesm\)的矩阵,使得任意\(4\times4\)的子矩阵中,左上\(2\times2\)与右下\(2\times2\)的矩阵的异......
  • [Codeforces Round 857 (Div. 1)][Codeforces 1801A~1801G(部分)]
    FST哩,好似!本来能+80的,现在只加了30,相当于掉了50分捏1801A-TheVeryBeautifulBlanket题目大意:要求构造一个\(n\timesm\)的矩阵\(B\),使得对任意一个\(4\times4\)......
  • Codeforces Round 856 (Div. 2)
    Preface补题,话说这场题目数量好少的说……除了E题有点新花样前面题目都很简单的说,不过最后一天疯狂卡自然溢出的Hash,WA了一页可还行A.PrefixandSuffixArraySB题,我......