首页 > 其他分享 >7.25第二周周四学习总结

7.25第二周周四学习总结

时间:2024-07-25 18:52:03浏览次数:14  
标签:周四 arr 7.25 ll back 200010 int 第二周 include

  • 算法竞赛(差分)(上午)

初始化

#include <algorithm>
int arr[100];
std::fill(arr, arr + 100, 0);
//比memset更高效

int arr[100] = {}; // 所有元素都初始化为 0

栈溢出

为局部变量每次运行时都在运行栈中分配,如果数组很大,结果会造成运行栈溢出,自然就运行不了
另外,使用全局变量只是在静态区内分配,同样也有溢出的问题,显然你的数组需要的空间还没有到这么多

//作为全局变量,能运行
int a[1010][1010];
//作为局部变量,能运行,不能输入也不能输出

最大字段和(分治)

p1115

1e-9 表示科学记数法中的 10 的负九次方,即 0.000000001
不是-10^9;
#include<bits/stdc++.h>
using namespace std;
int n;
int a,b;
int ans=1e-9;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
	
	cin>>a;
	if(i==0)b=a;
	else
	{
		b=max(a,b+a);
	}
	ans=max(ans,b);
	
}
	cout<<ans;
	
	
	
	return 0;
}

  • 比赛团队赛3+算法竞赛(差分和前缀和)

借教室 差分+二分

https://www.luogu.com.cn/problem/solution/P1083
int 大概在2.15e9
所以本题我们要开longlong
比较难想的是我们要而二分订单数量,这有一个性质,订单数量数轴,如果前面的点不符合,后面一定不符合。

质检员

https://www.luogu.com.cn/problem/P1314

#include<bits/stdc++.h>
#define ll long long
#define R register int
#pragma GCC optimize(3)//O3优化
using namespace std;
ll n,m,s,l,r,mid,ans;//朴素定义,
ll w[200010],v[200010],le[200010],ri[200010],ss;
ll Min=1e15;   //记录结果 
ll q[200010],p[200010];  //前缀和记录
//q记录从0~i有几个符合题意的源石,p记录从0~i符合题意的石头的价值之和 
int main()
{

	scanf("%lld%lld%lld",&n,&m,&s);
	for(R i=1;i<=n;i++)
	{
		scanf("%lld%lld",&w[i],&v[i]);
		r=max(r,w[i]);//右边界设为最大的w[i],应该是显然对的……当然如果不放心开到1<<30也没问题 
	}
	for(R i=1;i<=m;i++)      //读入m个区间 
		scanf("%lld%lld",&le[i],&ri[i]);
	while(l<=r)        
	//这里取等了
	{
		ans=0,mid=(l+r)>>1;
		for(R i=1;i<=n;i++)   //循环更新前缀和数组 
		{
			if(w[i]>mid)
				q[i]=q[i-1]+1,p[i]=p[i-1]+v[i];
				//q存前i个数量和,p存前i个价值和。二分W(所求)
				//我们在求区间和所以用前缀和优化
			else
				q[i]=q[i-1],p[i]=p[i-1];
		}
		for(R i=1;i<=m;i++)     //计算一下Y,也就是Y1+Y2+……+Yn 
			ans+=(q[ri[i]]-q[le[i]-1])*(p[ri[i]]-p[le[i]-1]);
			//每个区间的数量和×价值和即yi
		ss=s-ans;        //这里先不要绝对值,要利用原数决定怎么改l和r的值 
		//ans y大于s时,增大w减小y,使y-s绝对值减小
		//ans y小于s时,减小w增大y,使y-s绝对值增大
		if(ss<0)l=mid+1;     //小于0说明假定的W小了,扩大l的值 
		else r=mid-1;        //否则缩小r的值 
		Min=min(Min,abs(ss));    //更新求得的最小值 
	}
	printf("%lld",Min);   
   
}

算法竞赛 排序和排列

结构体

image
//这个相当于定义结构体同时,定义了结构体变量s1,s2;
//补充)sort左闭右开
image
https://blog.csdn.net/m0_51064412/article/details/130352792

排列 next_permutation(s.begin(),s.end(),cmp)

prev.permutation求前一个排列组合

string s="abc";
do{
cout<<s<<endl;
}while(next_permutation(s.begin(),s.end()));

//输出第n个排列,n=1654
do{
		if(n==1654){
		    for(int i=0;i<7;i++)
              cout<<a[i];
            cout<<endl;
        break;
		}
        n++;
    }while(next_permutation(a,a+7));
//序列中有重复元素会去重

//结构体需要定义如何比较
struct test{//结构体test 
	int val;
}; 
bool cmp(test t1,test t2){//自定义的排列 
	return t1.val<t2.val;
}
int main(){
	test t[4];//结构体数组 
	t[0].val=1;
	t[1].val=2;
	t[2].val=3;
	t[3].val=4;
	
	do{
		for(int i=0;i<4;i++){//打印排列 
			cout<<t[i].val<<' ';
		}
		cout<<endl;
		
//vector
#include<iostream>
#include<vector> //使用vector需要导入的头文件 
#include<algorithm>//使用 next_permutation()和sort()需要导入的头文件 
using namespace std;

int main(){
	vector<int> v;//定义一个int型的vector 
	v.push_back(1);//在尾部插入数据1 
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	
	do{
		for(int i=0;i<v.size();i++){//打印排列 
			cout<<v[i]<<' ';
		}
		cout<<endl;
	}while(next_permutation(v.begin(),v.end()));//获取下一个排列 
} 

标签:周四,arr,7.25,ll,back,200010,int,第二周,include
From: https://www.cnblogs.com/hoshino-/p/18322414

相关文章

  • (三)复习第三课(07.20- 07.25第二轮):HTML标签元素练习大全
    <!DOCTYPEhtml><!--练习时间:2024.07.20-2024.07.25--><htmllang="en"><!--添加了en可以让你的网站打开时会提示翻译--><head> <pid="head1"></p><metacharset="utf-8"><!--对于中文网页需要使用此标签声明编码,否则会出现......
  • 7.23第二周周二学习总结
    基础算法复习(上午)双指针一本书P页,第i页有知识点ai,同一个知识点可能多次提到,希望通过连续的一些页把所有知识点都覆盖到。求出连续的最少页数#include<iostream>#include<algorithm>#include<cmath>#include<set>#include<map>#include<cstdio>#defineINF0x3f3f3......
  • 暑假第二周周报
    这一周在主攻搜索,题单里的搜索题感觉写的还是比较顺利的,还剩一题八数码要用到一些进阶的搜索算法。以下是感觉比较有收获的题目:一、数独挑战:用到了位运算,用位运算进行标记以及判定,可以有效节约空间和时间。二、[NOIP2014]寻找道路题目要求在有向图上找一条最短路,满足路径上......
  • 暑假训练第二周周报
    总体学习情况这周时间大多花在写上周的堆栈的题单了,然后比赛又碰到了一些新的知识点,比如无权二分图的最大匹配,01背包的相似例题,但是感觉数据结构的基础还是得练,遇到一些题还是没办法写对。知识点模块1.无权二分图最大匹配用通俗的话来讲,假如有几个男的和几个女的存在暧昧关系,......
  • 第二周总结
    一、阅读第二周我阅读了《大道至简》第二章的内容,第二章主要讲了勤奋的人与懒惰的人在方法创新方面的差异,引用了《李冰凿山》的故事,通过“积薪烧之”的方式与第一章愚公“碎石击壤”形成对比,突出了本章的主题。愚公是典型的勤奋者的身份,但工作缺乏动脑,不创新,使得工作费时又费力。......
  • 第二周进度总结
    第二周总结:配置环境变量可以在任意目录下打开指定软件。方法:打开我的电脑,空白处右键后点击属性,点击高级系统设置,点击高级,点击环境变量,找到path处,点击编辑,新建后粘贴即可。文件夹含义:bin:各种工具和命令。conf:相关配置文件。include:平台特定的头文件。jmods:各种模块。leg......
  • 2024/07/19(暑假学习hadoop第二周总结)
    本周的学习任务主要是完成Hadoop中有关的组件的配置。有关于此配置的过程严格按照黑马程序员大数据入门到实战教程,大数据开发必会的Hadoop、Hive,云平台实战项目全套一网打尽_哔哩哔哩_bilibili来进行配置。首先就是HDFS的配置,这是Hadoop分布式文件系统,用于在多个服务器上构建存储......
  • 学习Java的第二周
    本该周六晚之前发表的第二次博客...因为自己也出了意外进了急诊拖到现在,先在这里致歉...黑马网课看了将近三十个课时了,目前感觉良好,越看越学越有兴趣。对于我这种0基础的小菜来说,初学时不应该追求深度,而应该去追求广度。从基础语法(方法、判断和循环、数组等)到面向对象,API、字符......
  • 第二周
    数据结构第二阶段综合应用算法训练自选题,我选择的是文件压缩解压。一、问题描述:名称:基于哈夫曼编码的文件压缩解压目的:利用哈夫曼编码压缩存储文件,节省空间输入:任何格式的文件(压缩)或压缩文件(解压)输出:压缩文件或解压后的原文件功能:利用哈夫曼编码压缩解压文件性能:快速......
  • 学Java的第二周(结构)
    条件结构1.顺序结构顺序结构是一组按照书写顺序执行的语句结构,这种语句结构的执行流程是按顺序地从一个处理过程转向下一个处理过程。2.选择结构选择结构又称为分支结构。当程序执行到分支判断的语句时,首先判断条件,然后根据条件表达式的结果选择相应的语句执行。分支结构包括......