首页 > 其他分享 >8,13号考试错题总结

8,13号考试错题总结

时间:2024-08-13 20:20:14浏览次数:6  
标签:13 const minn int mid 错题 ans include 考试

考试情况

A B C D E F
100 0 30 100 16 0

考题

A.P1571 眼红的Medusa

B.P2249 【深基13.例1】查找

C.P1678 烦恼的高考志愿

D.P1918 保龄球

E.P1102 A-B 数对

F.B3799 [NICA #1] 序列

考点/易错点

A.P1571 眼红的Medusa:考二分模板掌握度

B.P2249 【深基13.例1】查找:同上⬆️

C.P1678 烦恼的高考志愿:第二难,熟练掌握今天学的lower_bound和对于题目的理解度

D.P1918 保龄球:跟第一题一样,都是昨天讲了的题目,熟练运用板子和结构体排序

E.P1102 A-B 数对:昨天的作业题,考察今天学的lower_bound和upper_bound的掌握度

F.B3799 [NICA #1] 序列:跟第三题一样,但是还要运用之前学的前缀和。

错误题目

B.P2249 【深基13.例1】查找

错误代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+2;
int n,m,a[N],b;
int chen_teacher(int x)
{
	int l=0,r=n+1,minn=INT_MAX;
	a[0]=-1,a[r]=INT_MAX;
	while(l+1<r)
	{
		int mid=(l+r)/2;
		if(a[mid]<x)
		{
			l=mid;
		}
		else if(a[mid]>x)
		{
			r=mid;
		}
		else
		{
			minn=min(minn,mid);
			r=mid;
		}
	}
	if(minn==INT_MAX)
	{
		return -1;
	}
	return minn;
}
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&b);
		int q=chen_teacher(b);
		printf("%d ",q);
	}
	return 0;
}

错误分析

题目理解错误

本题输入输出量较大,请使用较快的 IO 方式。

把"IO方式"理解成了要用scanfprintf

scanf -> cin,printf -> cout

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+2;
int n,m,a[N],b;
int chen_teacher(int x)
{
	int l=0,r=n+1,minn=INT_MAX;
	a[0]=-1,a[r]=INT_MAX;
	while(l+1<r)
	{
		int mid=(l+r)/2;
		if(a[mid]<x)
		{
			l=mid;
		}
		else if(a[mid]>x)
		{
			r=mid;
		}
		else
		{
			minn=min(minn,mid);
			r=mid;
		}
	}
	if(minn==INT_MAX)
	{
		return -1;
	}
	return minn;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=m;i++)
	{
		cin>>b;
		int q=chen_teacher(b);
		cout<<q<<' ';
	}
	return 0;
}

C.P1678 烦恼的高考志愿

错误代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+2;
int m,n,a[N],b[N],ans,minn;
int main()
{
	scanf("%d %d",&m,&n);
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&b[i]);
	}
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++)
	{
		minn=INT_MAX;
		for(int j=1;j<=m;j++)
		{
			minn=min(minn,abs(b[i]-a[j]));
		}
		ans+=minn;
	}
	printf("%d",ans);
	return 0;
}

错误分析

由于当时二分板子写不出来,于是写了个暴力来骗分

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+2;
int m,n,a[N],b[N];
long long ans;
int main()
{
	cin>>m>>n;
	for(int i=1;i<=m;i++)
	{
		cin>>a[i];
	}
	sort(a+1,a+1+m);
	for(int i=1;i<=n;i++)
	{
		cin>>b[i];
		int pos=lower_bound(a+1,a+1+m,b[i])-a;
		if(pos==m+1)
		{
			ans+=abs(b[i]-a[m]);
			continue;
		}
		if(pos==1)
		{
			ans+=abs(b[i]-a[1]);
			continue;
		}
		if(abs(b[i]-a[pos])<abs(b[i]-a[pos-1]))
		{
			ans+=abs(b[i]-a[pos]);
		}
		else
		{
			ans+=abs(b[i]-a[pos-1]);
		}
	}
	cout<<ans;
	return 0;
}

E.P1102 A-B 数对

错误代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5*2+2;
int n,c,a[N],ans;
int chen_teacher(int x,int i)
{
	int l=0,r=n+1,cnt=0;
	a[0]=-1,a[r]=INT_MAX;
	while(l+1<r)
	{
		int mid=(l+r)/2;
		if(a[mid]<x)
		{
			l=mid;
		}
		else if(a[mid]>x)
		{
			r=mid;
		}
		else
		{
			if(mid!=i)
			{
				cnt++;
			}
			if(a[mid-1]==a[mid])
			{
				r=mid;
			}
			else
			{
				l=mid;
			}
		}
	}
	return cnt;
}
int main()
{
	cin>>n>>c;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++)
	{
		ans+=chen_teacher((a[i]-c),i);
	}
	cout<<ans<<'\n';
	return 0;
}

错误分析

打了一个二分板子,过了样例,但是没有过数据,把问题复杂化了,实际上用upper_boundlower_bound就可以轻松通过

AC代码

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+2;
int a[maxn],n,c;
long long ans;
int main()
{
	cin>>n>>c;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++)
	{
		int b=a[i]-c;
		int geshu=upper_bound(a+1,a+1+n,b)-lower_bound(a+1,a+1+n,b);
		ans+=geshu;
	}
	cout<<ans;
	return 0;
}

C.P1678 烦恼的高考志愿

错误代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+2;
int m,n,a[N],b[N],ans,minn;
int main()
{
    scanf("%d %d",&m,&n);
    for(int i=1;i<=m;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&b[i]);
    }
    sort(a+1,a+1+n);
    for(int i=1;i<=n;i++)
    {
        minn=INT_MAX;
        for(int j=1;j<=m;j++)
        {
            minn=min(minn,abs(b[i]-a[j]));
        }
        ans+=minn;
    }
    printf("%d",ans);
    return 0;
}

错误分析

由于当时二分板子写不出来,于是写了个暴力来骗分

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+2;
int m,n,a[N],b[N];
long long ans;
int main()
{
    cin>>m>>n;
    for(int i=1;i<=m;i++)
    {
        cin>>a[i];
    }
    sort(a+1,a+1+m);
    for(int i=1;i<=n;i++)
    {
        cin>>b[i];
        int pos=lower_bound(a+1,a+1+m,b[i])-a;
        if(pos==m+1)
        {
            ans+=abs(b[i]-a[m]);
            continue;
        }
        if(pos==1)
        {
            ans+=abs(b[i]-a[1]);
            continue;
        }
        if(abs(b[i]-a[pos])<abs(b[i]-a[pos-1]))
        {
            ans+=abs(b[i]-a[pos]);
        }
        else
        {
            ans+=abs(b[i]-a[pos-1]);
        }
    }
    cout<<ans;
    return 0;
}

F.B3799 [NICA #1] 序列

错误代码

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+2;
int main()
{
	cout<<"22\n31\n45";
	return 0;
}

错误分析

当时写不出来,于是直接输出样例了。

AC代码

#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+2;
long long a[maxn],sum[maxn],n,m,ans,op,k;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++)
	{
		sum[i]=sum[i-1]+a[i];
	}
	while(m--)
	{
		cin>>op;
		if(op==1)
		{
			cin>>k;
			ans+=k;
		}
		else if(op==2)
		{
			long long pos=lower_bound(a+1,a+1+n,-ans)-a,l=pos,r=n;
			cout<<(sum[r]-sum[l-1])+(r-l+1)*ans<<'\n';
		}
	}
	return 0;
}

总结

对于运用upper_boundlower_bound的方式还不熟,还是要把二分板子还要再背一下。

标签:13,const,minn,int,mid,错题,ans,include,考试
From: https://www.cnblogs.com/basibatuo/p/18357614

相关文章

  • 数据库系统 第13节 索引
    索引(Indexing)是一种数据结构技术,广泛应用于数据库和文件系统中,用于提高数据检索的速度。在没有索引的情况下,数据库必须从头到尾扫描整个表来找到所需的数据行,这被称为全表扫描(FullTableScan),对于大型数据库来说效率极低。索引的基本原理索引类似于书籍的目录。当你需要查......
  • 8.13今日份作业
     链栈,自己实现一遍,但是节点存储不是整数,存储学生信息(年龄,分数,姓名)三级引用。1、建立学生信息结构体,将data改为学生信息结构体类型。2、循环入栈和入队。链式栈:#include<myhead.h>typedefintmy_int;typedefcharSTR[20];typedefstruct{ STRname;//姓名 my_int......
  • 嵌入式软件--数据结构与算法 DAY 13
    在嵌入式中,对算法的要求不高,但顺序查找和冒泡排序是经典算法,必须掌握。1.算法定义算法是一个用于解决特定问题的有限指令序列(计算机可以执行的操作)。通俗的理解就是可以解决特定问题的方法。2.时间复杂度时间复杂度不是执行完一段程序的总时间,而是描述为一个算法中基本操作......
  • 20240813:组合计数选做
    P3214[HNOI2011]卡农题意:\(m\)个集合,\(n\)种元素,求集合间互不相同且每种元素出现偶数次的方案数。题目等价于从\(1\sim2^n-1\)里选出\(m\)个不同的数,使他们异或和为\(0\)。不妨对每个数标号,由于互不相同,最后除以\(m!\)即可。设\(f_i\)表示前\(i\)个数异或......
  • 2024年导游考试题库及答案
    1、下列有关接待宗教旅游团(者)的说法中,正确的有________。A、非穆斯林到穆斯林家中做客时,一般不主动与妇女或少女握手B、穆斯林客人禁食鳗鱼C、对基督徒可称呼弟兄、姐妹D、对佛教徒不可以道“辛苦”E、送穆斯林中国火腿答案:ABC2、导游员小张在带团过程中强迫旅游者进购......
  • VisionPro二次开发学习笔记13-使用CogToolBlock进行图像交互
    该程序演示了如何使用CogToolBlock进行图像交互.从vpp文件中加载一个ToolBlock。用户可以通过应用程序窗体上的数字增减控件修改ToolBlock输入端子的值。用户还可以从coins.idb或采集FIFO中选择图像。“运行一次”按钮执行以下操作:获取下一个图像或读取下一个图像......
  • 8 12 考试总结
    812考试总结难度分布不是很合理?果然只是我太菜了T1原题:[ARC164B]SwitchingTravel观察题意:可以发现是找一条黑白相间,两端颜色一致的链拼起来的环。讲真,当时想的是直接爆搜的,但在设计时遇到了一些问题,导致没写出来。正解是并查集判环。若一条边连接的两点颜色不同,则其......
  • ARC134E
    手玩题思路由于数据范围小,所以可以手动模拟找规律。假设\(A\)为先手,据题意,当轮到\(A\)操作时,如果此时序列里最大数为\(0\)(也就是序列里全是\(0\)),那么\(A\)就赢了。由于\(A\)操作时序列的状态是由\(B\)操作时的序列取模之后得到的,所以\(B\)操作时的序列中的元素肯定有相同的约......
  • EdrawMax v13 解锁版下载和安装教程 (综合图形图表设计软件)
    前言万兴亿图图示(WondershareEdrawMax)是一款综合图形图表设计软件,Visio国产替代.亿图图示中文版(EdrawMax)是一款办公绘图软件的思维导图软件.无需任何绘图功底,即可轻松创建各类思维导图.亿图图示专家,提供大量事例和在线模板,用于创建流程图,信息图,组织结构图,科学......
  • 8月13日微语报,星期二,农历七月初十
     8月13日微语报,星期二,农历七月初十,工作愉快,生活喜乐!一份微语报,众览天下事!1、埃及和南非等非洲国家将申办奥运会。2、成都发布新政:9月15日起公积金可直付购房款。3、国内半年新增超20万家AI企业,我国AI大模型产业规模全球第二。4、南水北调施工现场发生事故致5死,企业负责......