CF1454 div3 惨死

打开电脑,忽然发现今天又div3,打!
22点35分,比赛开始了

A

题面

CF题面
给定 n n n,构造一个长度为 n n n的排列 p p p,要求没有i(1 ≤ \leq i i i ≤ \leq n)= p i p_i pi

思路

将最后一个数先输出,后面按从1~n-1的顺序输出

代码

#include<bits/stdc++.h>
#include<algorithm>
#define int long long
using namespace std;
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	//MessageBox(GetForegroundWindow(),"标题","内容",MB_YESNO);
	int t;
	cin>>t;
	int n;
	while(t--){
		cin>>n;
		cout<<n<<' ';
		int sum=0;
		for(int i=1;i<=n-1;i++){
			sum++;
			cout<<sum<<' ';
		}
		cout<<endl;
	}
	return 0;
}

B

题面

CF题面
给定 n n n a a a数组
要求找出最小且仅在数组中出现过一次的数,如果不存在,输出 − 1 -1 1

思路

开一个 v e c t o r vector vector,将每一个数都存进去,找出 s i z e size size是1的即可。

代码

#include<bits/stdc++.h>
#include<algorithm>
#define int long long
using namespace std;
void slove(){
	int n,x;
	cin>>n;
	vector<int>sum(n+5);
	for(int i=1;i<=n;i++){
		cin>>x;
		sum[x].push_back(i);
	}
	for(int i=1;i<=n;i++){
		if(sum[i].size()=1){
			cout<<sum[i].back()+1<<endl;	
			return;
		}
	}
	cout<<"-1"<<endl;
}
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	//MessageBox(GetForegroundWindow(),"标题","内容",MB_YESNO);
	int t;
	cin>>t;
	while(t--){
		slove();
	}
	return 0;
}

C

题面

CF题面
给定 n n n a a a数组
选择至少出现过一次的整数 x x x,然后执行任意次数(可能是零)的以下操作:
选择序列的某个段[ l l l, r r r]并将其删除。但有一个例外:您不能选择包含 x x x的片段。更正式地说,您可以选择一些连续的子序列 a l a_l al, a l + 1 a_{l+1} al+1 … … a r a_r ar,使得 a i ≠ x ai≠x ai=x,并去掉它。
删除后,被删除段右侧的元素编号会发生变化:原来是第(r+1)个元素的元素现在是第l个元素,第( r + 2 r+2 r+2)个元素现在是第( l + 1 l+1 l+1)个元素,依此类推(即剩余的序列刚刚折叠)。

思路

暴力枚举,让每一个数都等于x,找出分的段数即可。注意头和尾必须减1。

代码

#include<bits/stdc++.h>
#include<algorithm>
#define int long long
using namespace std;
int a[200005],sum[200005];
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	//MessageBox(GetForegroundWindow(),"标题","内容",MB_YESNO);
	ios_base::sync_with_stdio(false);
	int t;
	cin>>t;
	int n;
	while(t--){
		cin>>n; 
		memset(sum,0,sizeof(sum));
		for(int i=1;i<=n;i++){
			cin>>a[i];
			if(a[i]!=a[i-1]){
				sum[a[i]]++;
			}
		}
		sum[a[1]]--,sum[a[n]]--;
		int minv=1e9;
		for(int i=1;i<=n;i++){
			minv=min(minv,sum[a[i]]);
		}
		cout<<++minv<<endl;
	}
	return 0;
}

总结

D E F DEF DEF题都没有做出来, B C BC BC两题都想复杂了,需要多做题,多刷题,见更多的题,希望下次 d i v 3 div3 div3不要再这么丢人了/kk

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页