首页 > 其他分享 >CSP-J2021试题题解

CSP-J2021试题题解

时间:2023-05-20 10:34:39浏览次数:43  
标签:return int 题解 ll long js1 tb CSP J2021

1.分糖果

原题:https://www.luogu.com.cn/problem/P7909

原代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,l,r;
int main(){
	cin>>n>>l>>r;
	if(r%n==n-1)cout<<n-1;
	else if(l%n==n-1)cout<<n-1;
	else if((r-(r%n)-1)>=l)cout<<n-1;
	else{
		ll ans=-1e9;
		for(ll i=l;i<=r;i++)ans=max(ans,i%n);
		cout<<ans;	
	}
	return 0;
}

  

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,l,r;
int main(){
	cin>>n>>l>>r;
	if(r-n<n)cout<<r-n; 
	else{
		ll ans=-1e9;
		for(ll i=l;i<=r;i++)ans=max(ans,i%n);
		cout<<ans;	
	}
	return 0;
}

  

解题思路:

当r-n<n时,直接输出r%n,否则遍历l到r,枚举每个数模n的最大值

错误原因:

直接遍历l到r,复杂度很高,所以超时

 

2.插入排序

原题:https://www.luogu.com.cn/problem/P7910

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e4+255;
struct node{
	int id,v;
}a[N];
int w[N],n,q,op,x,y;
bool cmp(node a,node b){
	if(a.v==b.v)return a.id<b.id;
	return a.v<b.v;
}
void init(){
	cin>>n>>q;
	for(int i=1;i<=n;i++)cin>>a[i].v,a[i].id=i;
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++)w[a[i].id]=i;
}
void Solve(){
	while(q--){
		cin>>op>>x;
		if(op==1){
			cin>>y;
			int nump=w[x];
			if(a[nump].v>y){
				a[nump].v=y;
				for(int j=nump;j>1;j--){
					if(a[j].v<a[j-1].v||a[j].v==a[j-1].v&&a[j].id<a[j-1].id){
						w[a[j].id]=j-1;
						w[a[j-1].id]=j;
						swap(a[j],a[j-1]);
					}else break; 
				}
			}else if(a[nump].v<y){
				a[nump].v=y;
				for(int j=nump;j<n;j++){
					if(a[j].v>a[j+1].v||a[j].v==a[j+1].v&&a[j].id>a[j+1].id){
						w[a[j].id]=j+1;
						w[a[j+1].id]=j;
						swap(a[j],a[j+1]);
					}else break; 
				}
			}
		}else cout<<w[x]<<'\n';
	}
}
int main(){
	init();
	Solve();
	return 0;
}

  

解题思路:
这道题模拟会超时,可以定义一个数组,存储每个数的位置,每次更新数值时,更新排名,输出即可

 

3.网络连接

原题:https://www.luogu.com.cn/problem/P7911

代码:

#include<bits/stdc++.h>
#include<cstdio>
#define ll long long
using namespace std;
map<string,int>Ser;
int n;
bool isok(char s[]){
	int a=-1,b=-1,c=-1,d=-1,e=-1;
	int t=sscanf(s,"%d.%d.%d.%d:%d",&a,&b,&c,&d,&e);
	if(t!=5)return 0;
	if(a<0||a>255)return 0;
	if(b<0||b>255)return 0;
	if(c<0||c>255)return 0;
	if(d<0||d>255)return 0;
	if(e<0||e>65535)return 0;
	char s1[35];
	sprintf(s1,"%d.%d.%d.%d:%d",a,b,c,d,e);
	int len=strlen(s);
	for(int i=0;i<len;i++)if(s[i]!=s1[i])return 0;
	return 1;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		char op[35],s[35];
		cin>>op>>s;
		if(op[0]=='S'){
			if(!isok(s))cout<<"ERR\n";
			else if(Ser.count(s))cout<<"FAIL\n";
			else Ser[s]=i,cout<<"OK\n";
		}else if(op[0]=='C'){
			if(!isok(s))cout<<"ERR\n";
			else if(!Ser.count(s))cout<<"FAIL\n";
			else cout<<Ser[s]<<'\n';
		}
	}
	return 0;
}

  

解题思路:

大模拟,按题目要求模拟即可

 

4.小熊的果篮

原题:https://www.luogu.com.cn/problem/P7912

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2e5+255;
struct node{
	int v,pre,next;
}a[N];
int n,tb[N][3],js=0;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i].v);
		a[i].pre=i-1;
		a[i].next=i+1;
	}
	a[0].v=a[0].pre=-1;
	a[0].next=1;
	js=1;
	tb[1][0]=tb[1][1]=tb[1][2]=1;
	for(int i=2;i<=n;i++){
		if(a[i].v==a[tb[js][1]].v){
			tb[js][1]=i;
			tb[js][2]++;
		}else{
			tb[++js][0]=i;
			tb[js][1]=i;
			tb[js][2]=1;
		}
	}
	while(js){
		int js1=0;
		for(int i=1;i<=js;i++){
			printf("%d ",tb[i][0]);
			int p=tb[i][0];
			tb[i][0]=a[p].next;
			a[a[p].pre].next=a[p].next;
			a[a[p].next].pre=a[p].pre;
			if(tb[i][2]>=2){
				if(js1==0||a[tb[i][0]].v!=a[tb[js1][1]].v){
					tb[++js1][0]=tb[i][0];
					tb[js1][1]=tb[i][1];
					tb[js1][2]=tb[i][2]-1;
				}else{
					tb[js1][1]=tb[i][1];
					tb[js1][2]+=tb[i][2]-1;
				}
			}
		}
		puts("");js=js1;
	}
	return 0;
}

  

解题思路:

双向链表模拟即可

 

标签:return,int,题解,ll,long,js1,tb,CSP,J2021
From: https://www.cnblogs.com/zhanghx-blogs/p/17416864.html

相关文章

  • 问题解一
    (1)用pycharm连接mysql时,需要安装一个驱动,点击连接界面,如果TestConnection不可用,点击右边的按钮即可(2)如果要将同一网站不同链接的数据存入数据库,可考虑重写start_requestseg:forindex,hrefinenumerate(self.start_urls):ifindex==0:yieldscrapy.Request(......
  • 僵尸进程问题解决
    1何为僵尸进程僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出,子进程被init接管,子进程退出后init会回收其占用的相关资源。在UNIX系统中,一个进程结束了,但是它的父进程没有等待(调用wait/wai......
  • 【P4331 [BalticOI 2004]】Sequence 数字序列 题解(左偏树维护动态区间中位数)
    左偏树维护动态区间中位数。传送门P4331BalticOI2004Sequence数字序列。Solution1我的思路和题解前半部分完全重合了((如果按照单调不增去分割\(a\)序列的话,对于每一段我们能很简单地得出它的最佳答案:中位数。发现严格单调很难做,很难拿捏,考虑对\(a\)序列的每一项都进......
  • CSP-J2022山东补赛题解
    1.植树节原题:https://www.luogu.com.cn/problem/U285015代码:#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e6+255;inta[N],n,x,y,maxb=-1e9,ans=-1e9;intmain(){ cin>>n; for(inti=1;i<=n;i++){ cin>>x&g......
  • CSP-J2019试题题解
    1.数字游戏原题:https://www.luogu.com.cn/problem/P5660代码:#include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;strings;intmain(){ cin>>s;intnum=0; fo......
  • Luogu P5664 [CSP-S2019] Emiya 家今天的饭
    发现“每种主要食材至多在\(\lfloor\frac{k}{2}\rfloor\)个菜中被使用”有一个性质,在不合法的情况下绝对只有\(1\)个主要食材的个数\(>\lfloor\frac{k}{2}\rfloor\),因为\(k-\lfloor\frac{k}{2}\rfloor-1\le\lfloor\frac{k}{2}\rfloor\)然后就能发现算不合法......
  • CF1512C A-B Palindrome 题解
    CF1512CA-BPalindrome题解Link洛谷CodeforcesDescription给出\(T\)个只由0、1和?组成的字符串\(s\),将字符串中的?替换成0或1之后形成一个回文串并且恰好有\(a\)个0和\(b\)个1,无解输出-1。Solution首先,若不考虑?原串不为回文串一定无解,输出-1即......
  • CF1512D Corrupted Array 题解
    CF1512DCorruptedArray题解Link洛谷CodeforcesDescription给定一个正整数\(n\)和长度为\(n+2\)的数组\(b\),数组\(b\)是依据如下算法构造的:随机生成一个含有\(n\)个元素的原始数组\(a\);把数组\(a\)赋值给数组\(b\),即\(b_i=a_i(1\lei\len)\);数组\(b\)......
  • 【题解】第五届图灵杯
    //createdon23.05.13目录A.差值B.基础循环结构练习题C.基础计算几何练习题D.永恒悲剧A.差值考虑求长度为\(i\)的答案,肯定是长度\(\geqi\)的后缀,按照字典序排序后,相邻两个求解。所以考虑倒着扫,每次对于\(i\)的后缀找到排名前后第一个后缀,求出两个长度为\(i\)......
  • CSP-J2020试题
    1.优秀的拆分原题:https://www.luogu.com.cn/problem/P7071代码:#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e4+255;lln,x=0,power[N];intmain(){ cin>>n; if(n%2==1)cout<<"-1"; else{ while(n){ ......