首页 > 其他分享 >Acwing第 141 场周赛

Acwing第 141 场周赛

时间:2024-02-03 22:33:09浏览次数:36  
标签:周赛 141 int rep pos long mp define Acwing

A题

签到模拟即可

B题

单独考虑每一个a[i],如果i要是答案需要指针移动多少次,然后算完,排个序,指针移动最少的就是答案。

#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define ls p<<1
#define rs p<<1|1
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define debug(a) cout<<#a<<"="<<a<<endl;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define INF 0x3f3f3f3f 
#define x first
#define y second
#define pb push_back

using namespace std;

const int N=2e5+10,mod=1e9+7;

void solve()
{
	int n;cin>>n;
	vector<pii>a(n+1);
	int ans=1e9;
	rep(i,1,n)	
	{
		int val;cin>>val;
		int pos=val%n+1;
		if(n==0)	pos=1;
		int k=0;
		//a[i]减为0时指针的位置在i之后
		if(pos>i)	k=n-pos+i;
		else if(pos<i)	k=i-pos;
		a[i]={val+k,i};
	}	
	sort(a.begin()+1,a.begin()+1+n);
	cout<<a[1].y<<endl;
	return;
}
signed main()
{
	IOS	
//  	freopen("1.in", "r", stdin);
//  	int _;
//	cin>>_;
//	while(_--)
	solve();
	return 0;
}

C题

4e7d4e1e520f8e511b76f5cd7f4a545.png
赛时没过被卡map了开成vector光速过了
我的思路就是从前往后\(O(n)\)扫一遍模拟一下交换,这样交换的次数应该是最少的
用\(3*n-cnt\)去判断如果为偶数说明剩下的数可以通过偶数次交换不改变结果的情况下消耗掉。
这时就直接输出1反之则输出2

#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define ls p<<1
#define rs p<<1|1
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define debug(a) cout<<#a<<"="<<a<<endl;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define INF 0x3f3f3f3f 
#define x first
#define y second
#define pb push_back

using namespace std;

const int N=2e5+10,mod=1e9+7;

void solve()
{
	int n;cin>>n;
// 	map<int,int>mp;
	vector<int>a(n+1);
	vector<int>mp(n+1);
	rep(i,1,n)
	{
		cin>>a[i];
		mp[a[i]]=i;	
	}
	int cnt=0;
	auto change=[&]()
	{
		rep(i,1,n)
		{
			if(a[i]!=i)
			{
			    //tar是i当前所在的位置,pos
				int tar=mp[i];
				int tmp=a[i];
				swap(a[i],a[tar]);
				mp[i]=i;
				mp[tmp]=tar;
				cnt++;
				// cout<<mp[i]<<' '<<mp[a[i]]
			}
		}
		
	};
	change();
	if((3*n-cnt)%2==0)	cout<<1<<endl;
	else	cout<<2<<endl;		
	return;
}
signed main()
{
	IOS	
//  	freopen("1.in", "r", stdin);
//  	int _;
//	cin>>_;
//	while(_--)
	solve();
	return 0;
}

标签:周赛,141,int,rep,pos,long,mp,define,Acwing
From: https://www.cnblogs.com/cxy8/p/18005327

相关文章

  • AcWing 520. 子串 题解
    ps:觉得这编号很特殊就做了一下题目传送门算法(线性DP,前缀和)\(O(nmk)\)首先考虑如何DP,然后再考虑如何优化。状态表示:f[i,j,k]表示只用S的前i个字母,选取了k段,可以匹配T的前j个字母的方案数。状态计算:将f[i,j,k]表示的所有方案分成两大类:不用S[i],则方案数是f[i-1,......
  • AcWing 3721. 求30的倍数 题解
    传送门stoi这里我们来了解一个函数\(stoi\)作用是将\(n\)进制的字符串转化为十进制,使用时包含头文件\(string\)定义如下:intstoi(conststd::string&str,std::size_t*pos=nullptr,intbase=10);参数:\(str\)-待转换的字符\(pos\)-其取值可以是一个空字......
  • 牛客周赛 Round 30
    牛客周赛Round30A代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusingi128=__int128_t;voidsolve(){strings;cin>>s;for(inti=0;......
  • 牛客周赛 Round 29
    C题:用桶处理字符串重排小红拿到了一个字符串,其中一定包含连续子串"xiao",和连续子串"hong"。请你将字符串重排,使得该字符串包含"xiaohong"的连续子串。较简单的做法:遍历字符串,给每个字符放到相应的桶中,然后先先输出目标字符串xiaohong,同时对桶进行相对应的调整。最后再按任意顺......
  • Summary - ber 中周赛 Round 24
    倒数第一我最强,worthreflecting,故记之。T1一开始读错题了,浪费了不知道多久。然后后面实在不会了打了一个很丑的\(O(n\logn)\)。中途提示说学了双指针,但是认为那是T3用的,,,总之就没想到。但是为什么呀?固定好了右端点逐渐变大,左端点也变大,那么中间的最优决策点也逐渐变大。......
  • 牛客周赛 Round 29
    牛客周赛Round29小红大战小紫代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusingi128=__int128_t;voidsolve(){inta,b;cin>>a>>b;......
  • POJ1416 (dfs)
    POJ1416(dfs)公司现在要发明一种新的碎纸机,要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值(可以选择不切割)。比如,target的值是50,而纸条上的数字是12346,应该把数字切成四部分,分别是1、2、34、6。因为这样所得到的和43(=1+2+34+6)是所有可能中最接近而不超......
  • AcWing 717. 简单斐波那契
    AcWing717.简单斐波那契以下数列01123581321...被称为斐波纳契数列。这个数列从第33项开始,每一项都等于前两项之和。输入一个整数\(N\),请你输出这个序列的前\(N\)项。输入格式一个整数\(N\)。输出格式在一行中输出斐波那契数列的前\(N\)项,数字之间用......
  • 牛客周赛 Round 29(小白)
    A.小红大战小紫#include<bits/stdc++.h>#defineIOios::sync_with_stdio(false);cin.tie(0);cout.tie(0);usingnamespacestd;intmain(){IO;inta,b;cin>>a>>b;if(a>b)cout<<"kou\n";else......
  • Acwing2067
    在平面上有一些二维的点阵。这些点的编号就像二维数组的编号一样,从上到下依次为第 11 至第 n� 行,从左到右依次为第 11 至第 m� 列,每一个点可以用行号和列号来表示。现在有个人站在第 11 行第 11 列,要走到第 n� 行第 m� 列。只能向右或者向下走。注意,如果行号和列......