青少年编程知识记录 codecoming

2021CSP-J/S全国晋级二轮分数线公布

普及组CSP-J

序号省市CSP-J人数CSP-J晋级晋级比例最高分晋级最低分
1甘肃

13413399.25%8615
2宁夏10310198.06%6524
3天津46345197.41%8615.5
4云南40237894.03%79.517
5湖北68063292.94%89.526
6海南18617091.40%73.529
7陕西49344790.67%

93.528
8广西79568085.53%8628
9山西77362881.24%95.530
10贵州44733174.05%7130
11吉林45433273.13%9133
12河南111479871.63%

88.534.5
13内蒙古564071.43%58

34.5
14黑龙江35420557.91%8224.5
15新疆42523856.00%81.539
16江西48524750.93%86.636.5
17辽宁4752350.32%90

40
18湖南152874448.69%93.515
19香港723548.61%10045.5
20河北112251846.17%

93.540
21

澳门1033937.86%8231
22重庆143054137.83%9451.5
23上海2841100735.45%94.552.5
24安徽4731155832.93%98.534
25北京339794127.70%

96.553
26四川302870423.25%98.517
27江苏417273717.67%98.538
28广东562798617.52%95.558.5
29浙江606794615.59%9866
30山东11450132611.58%9815



山东普及组分数线55

小学组43





作者:亿万年的星光 分类:C++知识 浏览:

如何估算时间复杂度

首先:

  常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n^2)<Ο(n^3)<…<Ο(2^n)<Ο(n!)

时间复杂度可以简单理解为最多执行次数。



一、O(1)

一般情况下没有其他循环和递归调用,时间复杂度一般都是O(1)。比如下面这样的代码

#include<iostream>  using namespace std;  int main(){  	int a=0,b=0,x=0,y=0;  	cin>>a>>b;  	x=a+b;  	y=a-b;  	if(x>y){  	 cout<<x;  	}else{  	 cout<<y;  	}  	return 0;  }

二、O(n)

一般情况下,一个循环的时间复杂度是O(n),多个循环并列也是取循环次数最多的那个作为时间复杂度。当数据量增大n倍,耗时增大n倍。

#include<iostream>  using namespace std;  int main(){  	int a=n;  	cin>>n;  	for(int i=0;i<n;i++){  	    cout<<i;  	}  	return 0;  }



三、O(n2)、O(n*m)

双重循环嵌套一般就是O(n2)。当数据量增大n倍,耗时增大n方倍。

#include<iostream>  using namespace std;  int main(){  	int n=0;  	cin>>n;  	for(int i=0;i<n;i++){  	    for(int j=0;j<n;j++){  	        cout<<i;  	    }  	}  	return 0;  }

如果循环嵌套外层循环是n,内层循环是m。

#include<iostream>  using namespace std;  int main(){  	int n=0,m=0;  	cin>>n>>m;  	for(int i=0;i<n;i++){  	    for(int j=0;j<m;j++){  	        cout<<i;  	    }  	}  	return 0;  }

这个时候的时间复杂度是O(n*m)。



四、O(logn)

当数据增大n倍时,耗时增大logn倍。

#include<iostream>  using namespace std;  int main(){  	int n=0;  	cin>>n;  	for(int i=0;i<n;i++){  	   i*=2;  	   cout<<i;  	}  	return 0;  }

本来循环次数是n,现在i*=2了。那么答案是log(2)(n)。

反着想也可以,原来循环n次,现在每次i变成原来的2倍,也就是2的k次方等于n。那么正好就是log(2)(n),即O(log n)



或者下面这样:

#include<iostream>using namespace std;  int main(){  int n=0;  cin>>n;  while((n=n/2)>0){      cout<<n;  }   return 0;  }

时间复杂度也是O(logn)



五、O(nlogn)

一般归并排序和堆排序是O(nlogn)。 

常见的是外层循环的时间复杂度是n,内层循环的时间复杂度是logn。

比如下面这样:

for(int i=1; i<=n; i++)  {  	for(int j=1; j<=n; j+=i)  	{  		.....   //复杂度为O(1);  	}  }

注意:外层循环是n,内层循环j每次都增加i。

作者:亿万年的星光 分类:C++知识 浏览:

指针(三):指针与函数

1.交换的例子#include<iostream> #include<cstdio> #include<cstring> using namespace std; void swap(int x, int y){ int a=x; x=y; y=a; cout<<"函数内部"<<x<<" &q
作者:亿万年的星光 分类:C++知识 浏览:

指针(二):指针与数组

1.指针与数组的关系    指向数组的指针变量称为数组指针变量。“数组是内存上一块连续的空间”。数组名就是这块连续空间的首地址。2.指针指向数组    一开始的数组定义与输出:#include<iostream> #include<cstdio> using namespace std; int main(){ int a[10]; for(int 
作者:亿万年的星光 分类:C++知识 浏览:

指针(一):基础用法

1.定义什么是指针,简单来说:“指针就是地址”。2.指针变量的定义指针变量定义形式:  类型说明符  *变量名其中,*号表示指针变量。变量名即为定义的指针变量名,类型说明符表示该指针变量所指向的变量的数据类型。普通变量:int a=5;解释:定义了变量a,是int型的,值为5。内存中有一块内存空间是放a的值。对a的存取操作就是直接到这个内存空间存取。内存空间的位置叫地址,存放5的地址可以用取地址操作。用“&”符号运算得到。即&a;指针变量:int *p=NUL
作者:亿万年的星光 分类:C++知识 浏览:

判断闰年

代码参考:#include<iostream>  using namespace std; //判断闰年的函数  int leap(int year){ if((year%4!=0)||(year%100==0&&year%400!=0)) return 0;  //0表示是平年 else return 1; //1表示是闰年 }

标签: 闰年

作者:亿万年的星光 分类:C++知识 浏览:

2021 年青岛市程序设计竞赛试题(小学组)决赛

1.方程求解



【描述】

输入正整数 a,b,c。

求有多少组 x 和 y 满足 a*x+b*y=c 。x 和 y 都是非负整数。

【输入】

一行,包含三个正整数 a,b,c,两个整数之间用单个空格隔开。

【输出】

满足 a*x+b*y=c 的 x 和 y 的组数。

【输入样例】

2 3 18

【输出样例】

4

【样例说明】

有以下 4 组 x 和 y 满足 2*x+3*y=18:

x=0,y= 6

x=3,y= 4

x=6 ,y=2

x=9,y= 0

【数据范围】

50%的数据,1<=a,b,c<=1000;

100%的数据,1<=a,b,c<=100000。

作者:亿万年的星光 分类:C++知识 浏览:

求阶乘的方法

1.普通求法#include<iostream> using namespace std; int main(){ int sum=1; int n; cin>>n; for(int i=1;i<=n;i++){ sum=sum*i; }  cout<<sum; return 0; }2.递归法#include<iostream&
作者:亿万年的星光 分类:C++知识 浏览:

DEVC++中的断点调试

1.调试程序的两种方法编程的时候经常会遇到自己的输出结果跟标准结果或者预期的结果不一样,这个时候就要用到调试程序的功能。调试程序的目的有两个,一个是找出程序中的错误,另一个是监视变量的变化。2.DEVC++中的调试程序方法在DEVC++中,我们使用“断点”调。”断点“的主要意思是在调试模式下,遇到”断点“就停住,查看断点以前所有的变量的变化关系。3.设置及取消断点的方法#include<iostream> using namespace std; int&nb
作者:亿万年的星光 分类:C++知识 浏览:

进制转换类问题汇总

二进制转十进制十进制转二进制十进制转M进制(M一般小于16)M进制转十进制M进制和N进制互转
作者:亿万年的星光 分类:C++知识 浏览: