首页 > 编程语言 >2023市北区程序设计竞赛题解

2023市北区程序设计竞赛题解

时间:2023-05-12 21:36:30浏览次数:53  
标签:int 市北区 cin long vec 2023 竞赛题 ll define

1.分糖果

原题:

 

解题思路:

这道题类似于辗转相除法,这道题是辗转相减,每次取余数,如果整除,直接计算答案,并退出,否则继续取余

 

AC代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
	ll a,b,ans=0;cin>>a>>b;
	while(a!=b){
		if(a<b)swap(a,b);
		if(a%b==0){
			ans+=a/b-1;
			break;
		}
		ans+=a/b;a%=b;
	}
	cout<<ans;
	return 0;
}

  

2.名侦探小S

原题:

 

解题思路:

这道题有三种解法:第一种,定义一个map,记录编号,查找差值为X的编号是否存在即可

                                第二种,二分查找差值为X的编号

                                第三种,双指针做法,定义两个指针,L和R,如果差值大了,R--,否则L++,最终判断aR-aL是否等于X

AC代码1:

map解法

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6+5;
int T,n,x,a[N];
int main(){
//	freopen("Find.in","r",stdin);
//	freopen("Find.out","w",stdout);
	cin>>T;
	while(T--){
		bool flag=0;
		map<int,int>mp;
		cin>>n>>x;
		for(int i=1;i<=n;i++)cin>>a[i],mp[a[i]]++;
		for(int i=1;i<=n;i++){
			if(mp[a[i]+x]||mp[a[i]-x]){
				cout<<"Yes\n";
				flag=1;
				break;
			}
		}
		if(!flag)cout<<"No\n";
	}
	return 0;
}

  

AC代码2:

二分解法

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6+255;
int n,x,a[N],T;
//int find(int x){
//	int l=1,r=n;
//	while(l<=r){
//		int mid=(l+r)/2;
//		if(a[mid]==x)return mid;
//		else if(a[mid]>x)r=mid-1;
//		else l=mid+1;
//	}
//	return 0;
//}
int main(){
	cin>>T;
	while(T--){
		set<int>st;
		bool flag=0;
		cin>>n>>x;
		for(int i=1;i<=n;i++)cin>>a[i],st.insert(a[i]);
		sort(a+1,a+n+1);
		for(int i=1;i<=n;i++){
			if(*(lower_bound(a+1,a+n+1,a[i]+x))-x==a[i]){
				cout<<"Yes\n";
				flag=1;
				break;
			}
		}
		if(!flag)cout<<"No\n";
	}
	return 0;
}

  

AC代码3:

双指针解法

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6+5;
int n,x,a[N];
int main(){
	int T;cin>>T;
	while(T--){
		bool flag=0;
		cin>>n>>x;
		for(int i=1;i<=n;i++)cin>>a[i];
		sort(a+1,a+n+1);
		int l=1;
		for(int r=2;r<=n;r++){
			while(a[r]-a[l]>x)l++;
			if(a[r]-a[l]==x){
				flag=1;
				cout<<"Yes\n";
				break;
			}
		}
		if(!flag)cout<<"No\n";
	}
	return 0;
}

  

3.小S的计算

原题:

 

解题思路:

大模拟,第一次输入一个数值,后面的都是输入一个符号,一个数字,遇到加法,保留数字*1,遇到减法,保留数字*-1,遇到乘法,前一个数乘上数字,最后排序,求和输出

AC代码1:

vector存储

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e7+5;
ll a;char c;
bool cmp(ll a,ll b){
	if(abs(a)!=abs(b))return abs(a)<abs(b);
	return a>b;
}
int main(){
	vector<ll>vec;
	cin>>a;vec.push_back(a);
	while(cin>>c>>a){
		if(c=='+')vec.push_back(a);
		else if(c=='-')vec.push_back(-a);
		else vec.back()*=a;
	}
	sort(vec.begin(),vec.end(),cmp);
	ll ans=vec[0];cout<<vec[0];
	for(int i=1;i<vec.size();i++){
		ans+=vec[i];
		if(vec[i]>0)cout<<'+'<<vec[i];
		else cout<<vec[i];
	}
	cout<<'='<<ans;
	return 0;
}

  

AC代码2:

数组存储

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6+5;
ll a=0,ans=0,x[N],t=0,b;
bool flag=1;char p;
bool cmp(ll a,ll b){
	if(abs(a)==abs(b))return a>b;
	return abs(a)<abs(b);
}
int main(){
//	freopen("Solve.in","r",stdin);
//	freopen("Solve.out","w",stdout);
	cin>>a;x[++t]=a;
	while(cin>>p>>b){
		if(p=='*'){
			x[t]=x[t]*b;
		}else{
			if(p=='+'){
				x[++t]=b;
			}else{
				x[++t]=-b;
			}
		}
	}
	sort(x+1,x+t+1,cmp);
	for(int i=1;i<=t;i++){
		if(i==1)cout<<x[i];
		else{
			if(x[i]<0)cout<<x[i];
			else if(x[i]>0)cout<<"+"<<x[i];
		}
		ans+=x[i];
	}
	cout<<'='<<ans;
	return 0;
}

  

4.方块消除

原题:

 

解题思路:

尺取法,统计每种颜色出现的位置,定义L和R,计算最大长度

AC代码:

#include<bits/stdc++.h>
#define max(a,b)(a>b?a:b)
#define int long long
using namespace std;
const int N = 1e7+255;
vector<int>pos[N];
int n,m,k,ans=0;
signed main(){
	cin>>n>>m>>k;
	for(int x,i=1;i<=n;i++){
		cin>>x;
		pos[x].push_back(i);
	}
	for(int i=1;i<=m;i++){
		int l=0,sum=0;
		for(int r=0;r<pos[i].size();r++){
			while(sum>k)sum-=pos[i][l+1]-pos[i][l]-1,l++;
			if(sum<=k)ans=max(ans,r-l+1);
			sum+=pos[i][r+1]-pos[i][r]-1;
		}
	}
	cout<<ans;
	return 0;
}

  

 

标签:int,市北区,cin,long,vec,2023,竞赛题,ll,define
From: https://www.cnblogs.com/zhanghx-blogs/p/17396324.html

相关文章

  • 2023.5.12每日总结
    packageshiyan;importjava.sql.*;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassAllMethods{publicConnectionconnect;publicAllMethods()throwsException{Class.forName(&q......
  • 每日总结2023-05-12
    今天完成了dialog的简易模式:privatevoidshowQieDialog(){AlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setTitle("切换账号提示").setMessage("请确认切换账号").setPositiveButton("......
  • 2023.5.12编程一小时打卡
    一、问题描述:初始化int类型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},先用任一种算法对其进行排序,然后用户输入一个数字,折半查找函数模板找出他的位置。 二、解题思路:首先对数组进行排序,然后用数组的下标进行折半查找,利用数组下标的比较大小进行替......
  • 不是正经人2023
    记录生活点滴“你写日记吗?”“不写。”“是啊,正经人谁写日记啊,下贱”。确实,小时候的教育是写日记可以提高写作水平,但是,照着镜子看着自己摩擦系数较大的脸,怎么着也不是个秀才样,写的哪门子的日记,装的哪门子的穷酸书生。再说了,高中毕业后,在没有语文作文写作的要求下,自己已经很多年没......
  • WTYKAMC@2023
    将软件包放置于如下路径:C:\ProgramFiles\NationalInstruments\LabVIEW2016\user.lib 使用方法:新建一个vi——>右键浏览到并点击WTYK_AMC_Framwork.v 将会实现框架代码块的快速放置;......
  • 2023盘古石晋级赛
    其实有蛮多不确定的,欢迎讨论 Android程序分析1.涉案应用刷刷樂的签名序列号是(答案格式:123ca12a)(★☆☆☆☆)GDA直接查看结果为11fcf8992.涉案应用刷刷樂是否包含读取短信权限(答案格式:是/否)(★★☆☆☆)GDA直接查看结果为否3.涉案应用刷刷樂打包封装的调证ID值是......
  • 【2023-05-10】老板实况
    20:00提醒父母们很重要的一点:不要怕犯错误!因为如果你完美无缺,你的儿子想发火时可以找什么事由呢?如果你什么都做到了尽善尽美,他还怎么希望自己以后在什么地方超越你呢?所以,请允许错误的出现。从错误中学习,这才是错误存在的意义。在养育男孩的过程中,尽力而为就好!      ......
  • 【2023-05-11】不是坏事
    20:00巧伪不如拙诚。                                                 ——颜之推《颜氏家训》终于能坐下来喝口茶水了。连续一周,每天都在并行同时处理多个任务。工作......
  • 【EI检索】第九届机械、材料科学与工程应用进展国际学术会议(MMSE 2023)
    第九届机械、材料科学与工程应用进展国际学术会议(MMSE2023)2023年7月23-24日中国武汉|法国巴黎 MMSE系列会议自2010年创立以来,先后由武汉科技大学、华中科技大学、武汉理工大学、中国地质大学(武汉)、湖北省机械工程学会等单位承办。在过去的13年中,MMSE系列会议整理了学科领......
  • Google I/O 2023
    视频   产品框架  思维导图......