[c++实验] 快读快写,O123优化,原版用时对比

前言

        学过c++的多知道,准确的来说是做过c++题目的都知道:c++题目不仅要求代码正确,还要求用时,大多用时要求都在200ms--1000ms之间,要是遇到大数据时,超时的可能就会大大提升。

        结论    用时的把控也很重要!

实验

        题目

        题目描述

小爱想要画一棵 n 个节点的有根树,节点编号分别为1..n,他告诉了你他希望每个节点在这棵树上的深度 di​,其中根节点深度为 1。

请你根据给定信息,帮忙计算出有多少棵树满足小爱的要求?由于答案可能很大,请你输出对 10^9+7 取模后的结果。

        输入格式

        输入共两行,
        第一行,一个正整数 n ,表示节点个数
        第二行,n 个正整数 d1,d2,...,dn​,分别表示每个节点的深度

        原代码

#include
//#pragma GCC optimize(1,2,3,"Ofast","inline")
#define int long long
using namespace std;       
const int N=1e5+10;
const int M=1e9+7;
int n,a,T[N],mx,x=1;
signed main()
{
	scanf("%lld",&n);
	while(n--)
	{
		scanf("%lld",&a);
		T[a]++;
		mx=max(mx,a);
	}
	for(int i=3;i<=mx;i++)
	{
		if(T[i-1]>1)
		{
			for(int j=1;j<=T[i];j++)
			{
				x=x*T[i-1]%M;
			}
		}
	}
	cout<

        

        用时情况

[c++实验] 快读快写,O123优化,原版用时对比_第1张图片

         我们可以发现:    5*10ms    2*20ms

        加上快读快写的代码

#include
//#pragma GCC optimize(1,2,3,"Ofast","inline")
#define int long long
using namespace std;       
const int N=1e5+10;
const int M=1e9+7;
int n,a,T[N],mx,x=1;
signed read()
{
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')
	{
		if(c=='-')f=-1;
		c=getchar();
	}
    while(c>='0'&&c<='9')
	{
    	x=x*10+c-'0';
    	c=getchar();
	}
    return x*f;
}
void write(int x){
     if(x<0)
	 {
     	putchar('-');
     	x=-x;
	 }
     if(x>9)
	 {
     	write(x/10);
	 }
     putchar(x%10+'0');
}
signed main()
{
	n=read();
	while(n--)
	{
		a=read();
		T[a]++;
		mx=max(mx,a);
	}
	for(int i=3;i<=mx;i++)
	{
		if(T[i-1]>1)
		{
			for(int j=1;j<=T[i];j++)
			{
				x=x*T[i-1]%M;
			}
		}
	}
	write(x);
	return 0;
}

        用时情况

[c++实验] 快读快写,O123优化,原版用时对比_第2张图片

        我们可以发现:    3*10ms

        加上O1O2O3优化

        O1O2O3优化讲解,代码 

        

#include
#pragma GCC optimize(1,2,3,"Ofast","inline")
#define int long long
using namespace std;       
const int N=1e5+10;
const int M=1e9+7;
int n,a,T[N],mx,x=1;
signed read()
{
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')
	{
		if(c=='-')f=-1;
		c=getchar();
	}
    while(c>='0'&&c<='9')
	{
    	x=x*10+c-'0';
    	c=getchar();
	}
    return x*f;
}
void write(int x){
     if(x<0)
	 {
     	putchar('-');
     	x=-x;
	 }
     if(x>9)
	 {
     	write(x/10);
	 }
     putchar(x%10+'0');
}
signed main()
{
	n=read();
	while(n--)
	{
		a=read();
		T[a]++;
		mx=max(mx,a);
	}
	for(int i=3;i<=mx;i++)
	{
		if(T[i-1]>1)
		{
			for(int j=1;j<=T[i];j++)
			{
				x=x*T[i-1]%M;
			}
		}
	}
	write(x);
	return 0;
}

        用时情况

[c++实验] 快读快写,O123优化,原版用时对比_第3张图片

        我们发现:   只有一个10ms 

总结论

        想要快,用快读快些加优化。

你可能感兴趣的:(C++更多语法,c++入门必备,c++简介,c++,开发语言)