c++加速方法大全

我们平常写代码的时候,经常超时,非常难受,所以,我写了这篇文章,让你的代码提升速度(这些方法作者亲测有效,用了这些方法,足足提升了1秒!虽然最后题目还是没过

1、读入、输出加速:

ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);

这三行代码可以提升我们cin和cout的读入和输出速度,具体原理我也不太懂,反正你也不用知道,会用就行了

但是我们要注意,就算我们用了这三行代码,cin和cout的读入输出速度还是没有printf和scanf快,所以想要加速的更快,就要用printf和scanf

这里还有一种加速方法,叫快读快写,似乎比printf更快(我也不知道是不是真的)

inline int read(){//快读
    int x=0,w=0;
    char ch=0;
    while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
    while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
    return w ? -x : x;
}
inline void write(int x){//快写
    if(x<0)putchar('-'),x=-x;
    if(x>9)write(x/10);putchar(x%10+'0');
}

原理嘛,多看几遍大概都能看懂,主要是怎么用

快读这么用:

int x;//要读入x
x=read();//x=read读入的值

快写这么用:

int x=5;//要输出x
write(x);//输出x

注意,快读不能读入字符,只能读入数字(读入字符一点反应也没有);快写不能写字符,只能输出数字

快读快写还用升级版:

namespace IO{
int len = 0;
char ibuf[(1<<20)+1],*iS,*iT,out[(1<<25)+1];
#define gh()    \
    (iS==iT?iT=(iS=ibuf)+fread(ibuf,1,(1<<20)+1,stdin),    \
    (iS==iT?EOF:*iS++):*iS++)
#define reg register
inline int read(){
	reg char ch=gh();
	reg int x=0;
	reg char t=0;
	while(ch<'0'||ch>'9')
		t|=ch=='-',ch=gh();
	while(ch>='0'&&ch<='9')
		x=x*10+(ch^48),ch=gh();
	return t ? -x : x;
}
inline void putc(char ch){
	out[len++]=ch;
}
template <class T> inline void write(T x){
	if (x < 0)
		putc('-'),x=-x;
	if (x > 9)
		write(x/10);
out[len++]=x%10+48;
}
inline void flush(){
	fwrite(out,1,len,stdout);
	len=0;
}
}
using IO::flush;
using IO::putc;
using IO::read;
using IO::write;

虽然我知道这是升级版,但我不会用╥﹏╥

2、O3优化:

#pragma GCC optimize(2)

写代码的时候,把这句写进去(写在头文件下面),就能加速了,这是O2优化,那什么是O3优化呢?

#pragma GCC optimize(3)

这就是O3优化,把2改成3就好了,很简单吧?而且O3确实比O2快(亲测有效)

3、i++和++i

注意了,我们平常老师教我们写循环,都是这样:

for(int i=1;i<=n;i++){

}

千万不能这么写,要这样写:

for(int i=1;i<=n;++i){

}

如果可以,把所有的i++换成++i,特别是循环的时候,如果循环几千几万次,时间真的差很多:

注意了,i++和++i的含义也有区别

++i先让i加1,再返回i的值;而i++是先返回i的值,再让i加1。

4、变量类型:

一般来讲,我是喜欢一直用longlong而不是int,因为一般没什么区别,还能防止数据溢出

但是!要注意!如果题目中很明显的告诉你,这个变量用int就够了,就不要傻傻地用longlong(比如题目说1<=n<=100,n用int就够了)

因为longlong的范围大了,运算的时间也更多了,会比int慢一倍!

比如int a;a+1可能要算1ms,

而long long a;  a+1可能要算2ms!!!


好了,这就是我知道的所有加速方法了,当然还是有一些小细节的东西,比如在循环内定义变量合在循环外定义变量有什么区别,这些我就不太懂了,你们可以找别的问文章

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 马里奥是一款经典的编程游戏,我们可以使用C语言来编写它的代码。 首先,我们需要定义马里奥的位置坐标,并初始化其位置为屏幕左上角。我们还需要定义马里奥的速度和加速度,用于控制其移动。 ```c int marioX = 0; //马里奥的横坐标 int marioY = 0; //马里奥的纵坐标 int marioSpeedX = 0; //马里奥的横向速度 int marioSpeedY = 0; //马里奥的纵向速度 int marioAccX = 0; //马里奥的横向加速度 int marioAccY = 0; //马里奥的纵向加速度 ``` 接下来,我们需要编写一个游戏循环,来实时更新马里奥的位置。通过监听键盘输入,我们可以改变马里奥的速度和加速度,从而控制其移动。 ```c while(1) { //游戏循环 if (键盘左键被按下) { marioAccX = -1; //向左加速 } else if (键盘右键被按下) { marioAccX = 1; //向右加速 } else { marioAccX = 0; //停止加速 } //根据加速度和速度更新马里奥的位置 marioSpeedX += marioAccX; marioSpeedY += marioAccY; marioX += marioSpeedX; marioY += marioSpeedY; //将马里奥的位置更新到屏幕上 渲染(marioX, marioY); //延时,控制游戏循环的速度 延时(100); } ``` 最后,我们还需要实现一些其他的功能,例如碰撞检测、跳跃等等。这些功能可以根据具体的游戏规则来进行编码。 以上是一个简单的马里奥游戏代码的示例,通过不断优化和完善,我们可以实现更加丰富和有趣的马里奥游戏。 ### 回答2: 马里奥是一个经典的游戏人物,我们可以通过编程来模拟马里奥游戏的一些基本操作和规则。 首先,我们需要一个画布来展示游戏界面,就像电视屏幕一样。我们可以使用Python中的turtle图形库来创建一个空的游戏场景。 接下来,我们可以定义一些基本的游戏元素,如马里奥本身、敌人、平台和障碍物。我们可以使用turtle图形库中的图形函数来绘制这些元素。 然后,我们可以定义一些游戏规则,如马里奥的移动、跳跃、收集硬币、避开敌人等。我们可以使用Python中的变量、循环和条件语句来实现这些规则。 例如,如果马里奥碰到敌人,游戏结束;如果马里奥收集到一定数量的硬币,则游戏胜利。我们可以使用条件语句来判断游戏是否结束或胜利,并在相应情况下呈现相应的游戏提示。 最后,我们可以添加一些额外的功能,如背景音乐、计分板等,以增加游戏的乐趣和交互性。 总的来说,通过编程来实现马里奥游戏,我们可以学习到如何运用编程语言来设计游戏,并且提升逻辑思维和解决问题的能力。编程游戏代码马里奥是一个有趣且富有挑战性的项目,希望你也能尝试一下!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值