首页 > 其他分享 >2021 CSPJ

2021 CSPJ

时间:2023-11-01 16:24:02浏览次数:37  
标签:q2 return int .% CSPJ 2021 maxn op

 其实哪里需要模拟啊!!!这么简单的问题!!!是头猪也想得到

#include <bits/stdc++.h>
using namespace std;
const int maxn=505;

int main()
{
	int n,l,r;
	cin>>n>>l>>r;
	if(l/n==r/n) cout<<r%n;
	else cout<<n-1<<endl;
	return 0;
}

  【21CSPJ普及组】插入排序(sort)

 其实也是直接模拟就可以,每次都记录一下改变之后每个数字的位置信息

#include <bits/stdc++.h>
using namespace std;
const int maxn=8005;

int t[maxn];
struct node{
	int pre,id;
}op[maxn];
int n,q;
bool cmp(node a,node b){
	if(a.pre!=b.pre) return a.pre<b.pre;
	else return a.id<b.id;
} 
int main()
{
	cin>>n>>q;
	for(int i=1;i<=n;i++) {
		cin>>op[i].pre;
		op[i].id=i;
	}	
	sort(op+1,op+1+n,cmp);
	//先记录排完序后每个点的位置
	for(int i=1;i<=n;i++){
		t[op[i].id]=i;
	} 
	while(q--){
		int opa,x,v;
		cin>>opa;
		if(opa==1){
			cin>>x>>v;
			op[t[x]].pre=v;
			//然后往两个方向扫描,因为不确定是变小了,还是变大了
			for(int j=n;j>=2;j--){
				if(cmp(op[j],op[j-1])) swap(op[j],op[j-1]);
			} 
			for(int j=2;j<=n;j++){
				if(cmp(op[j],op[j-1])) swap(op[j],op[j-1]);
			}
			//然后更新
			for(int i=1;i<=n;i++) t[op[i].id]=i;
		}
		else {
			cin>>x;
			cout<<t[x]<<endl;
		}
	}
	return 0;
}

  【21CSPJ普及组】网络连接(network)

1、就是字符串的处理,记住可以用sscanf(),sprintf()函数

int t=sscanf(s,"%d.%d.%d.%d:%d",&a,&b,&c,&d,&e);    t记录的是成功读取的个数,肯定要等于5,然后判断abcde的大小范围,然后判断是否合格,就是用abcde去构造一个字符串,判断与输入的是否一样即可。sprintf(s2,"%d.%d.%d.%d:%d",a,b,c,d,e);

2、判重直接用map<string,int>即可

#include <bits/stdc++.h>
using namespace std;
const int maxn=8005;
map<string,int> vis;  //判重 
int n;
bool check(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 s2[35];
	sprintf(s2,"%d.%d.%d.%d:%d",a,b,c,d,e);
	int len=strlen(s);
	for(int i=0;i<len;i++){
		if(s[i]!=s2[i]) return 0;
	}
	return 1;
}
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		char op[105],ad[1005];
		cin>>op>>ad;
		if(op[0]=='S'){
			if(!check(ad)) cout<<"ERR"<<endl;
			else if(vis.count(ad)) cout<<"FAIL"<<endl;
			else {
				cout<<"OK"<<endl;vis[ad]=i;
			}
		}
		else{
			if(!check(ad)) cout<<"ERR"<<endl;
			else if(vis.count(ad)) cout<<vis[ad]<<endl;
			else cout<<"FAIL"<<endl;
		}
	}
	return 0;
}

  【21CSPJ普及组】小熊的果篮(fruit)

 这个其实基础算法,解决方法很多种,其实重点就是怎么处理“合并”的块,然后更新后重新去取数

1、首先对输入的数组先分块,输出每个块的第一个(记录哪个才是第一个),然后因为可能把一个块取完了,这里就直接continue,没取完就更新这个块里面那个才是第一。

2、每一轮取完了之后,要判断会不会有块能够结合,所以再创建一个队列,存放更新完的(合并后的),然后再次放到上面那个队列里面去

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
//很多种做法,直接写最好理解的队列,记住要维护每个队列的开始、结束位置,每次减少一个位置
//在每次出每个块的第一个元素的时候,记得两个块在队列里相邻且元素相同,就可以直接合并。
//-->两个队列
struct node{
	int st,ed,num;
};
bool vis[maxn];//判断有没有出队
int n,cnt;
int t[maxn]; //记录输入的数组 
queue<node> q,q2; 
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&t[i]);
	}
	t[n+1]=!t[n];
	int si=1;
	for(int i=2;i<=n+1;i++){
		if(t[i]!=t[i-1]) {
			q.push((node){si,i-1,t[i-1]});
			si=i;
		}
	}
	cnt=n;
	//两个队列,一个先出去处理后放q2,然后又更新回q里 
	while(cnt){
		while(q.size()){
			node f=q.front();
			q.pop();
			while(vis[f.st]&&f.st<=f.ed) f.st++;
			if(f.st>f.ed) continue;
			printf("%d ",f.st); //
			vis[f.st]=1;
			cnt--;
			if(f.st==f.ed) continue;
			f.st++;
			q2.push(f); 
		}
		printf("\n");
		while(q2.size()){
			node f=q2.front();
			q2.pop();
			while(q2.size()){
				node nex=q2.front();
				if(f.num==nex.num){
					f.ed=nex.ed;
					q2.pop();
				}
				else break;
			}
			q.push(f); //丢回去,每次取完更新完之后又放回去 
		}
	}
	return 0;
}

  

标签:q2,return,int,.%,CSPJ,2021,maxn,op
From: https://www.cnblogs.com/shirlybaby/p/17803415.html

相关文章

  • 2022 CSPJ
     直接模拟即可,注意特判#include<iostream>#include<cstdio>#include<ctime>#include<cstdlib>#include<cmath>#include<cstring>#include<algorithm>#definemaxn200010#defineLLlonglongusingnamespacestd;intmain(){......
  • Luogu P8518 [IOI2021] 分糖果
    题目链接 做这道题本意是为了补CCPC秦皇岛热身赛C,也就是2022CCPC华为云计算挑战赛 机器人那题先考虑一个盒子怎么做,并且不考虑限制那样的话可以得到时刻和盒子内球的数量的图像,考虑由这个不加限制的图像推出加上限制的实际答案完整的图像一定是极大值极小值交错,考虑两个相......
  • 【专题】2021 年中国电力行业经济运行报告PDF合集分享(附原数据表)
    报告合集根据实践创新,我们提出了“云上新型电力系统”,该系统将加速电力流、信息流和价值流的融通流动,通过更灵活高效的能源资源优化配置平台,支持大规模的新能源开发和利用。这一系统将为电力业务创新、电力行业发展以及全社会的绿色生产和生活提供坚实保障,并创造无限的可能性。电......
  • 2021 CCPC 哈尔滨
    gym开场zsy签了J,gjk签了B,我读错了E的题(\(=\bmod\)而不是\(\equiv\pmod2\)),gjk读对后过了zsy读了K给我,我记得是模拟赛原题,跟欧拉定理有关,但很难。他俩过了DI,我大概会了G但不会DP期望,跟zsy无效交流了一会凭感觉写1A了。C好像也是模拟赛原题就丢给他俩了L......
  • 2023-2024-1 20211211 第四章读书笔记
    第四章读书笔记一、知识点归纳(思维导图)二、收获总结并行线程的主要挑战有:线程同步、死锁、资源竞争、上下文切换开销等问题。线程级别的并行是指在多核处理器上同时执行多个线程,每个线程独立执行不同的任务。指令级别的并行是指在单个核心的处理器上同时执行多条指令。并发......
  • 2023-2024-1 20211327 信息安全系统设计与实现 学习笔记7
    学习笔记7顺序算法与并行算法线程的原理与优缺点线程管理函数线程同步实践过程顺序算法与并行算法顺序算法(SequentialAlgorithm)原理:顺序算法是一种线性执行的算法,它按照顺序一步一步地解决问题。这意味着每个操作都依赖于前一个操作的结果,只有在前一个操作完成之后才......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第八周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 【pwn】[SWPUCTF 2021 新生赛]nc签到 --shell过滤字符
    附件下载打开:importosart='''  (( "####@@!!$$  ))    `#####@@!$$` ))  (( '####@!!$:  (( ,####@!!$: ))    .###@!!$:    `##@@!$:    `#@!!$ !@#  `#@!$:   @#$  #$  `#@!$:   !@!......
  • 【2023潇湘夜雨】LTSC2021_Ent_21H2.19044.3636软件选装纯净版10.28
    【系统简介】=============================================================1.本次更新母盘来自Windows10LTSC_2021Build19044.3636。2.增加部分优化方案,手工精简部分较多。3.OS版本号为19044.3636。精简系统只是为部分用户安装,个别要求高的去MSDN下。4.集成《DrvCeo-2.15.0.......
  • Adobe Premiere Pro 2021正版下载-最新下载
    Adobe出品的全球顶级视频编辑创作软件PremiereProCS6结合了令人难以置信的性能,采用了圆滑的,更新界面和新的创意的神奇功能,包括稳定镜头,动态时间轴微调,扩大多镜头编辑,调整图层等更多功能。升级到AdobePremiereProCS6工作,可以实时支持最新手机,数码单反相机,HD和RAW格式。增强......