P6269 【[SHOI2002]空中都市】

这道题自己要多手模一下,我这里画图理解

那么对于(n=5)的情况,(ans=6)

一个例子不够明显,再来一个

那么对于(n=6)的情况,(ans=9)

不难发现这就是一个等差数列,公差为(2),末项为(n-1),可以用样例二验证一下

那么这道题就可以(O(1))了,但是本蒟蒻不会等差数列求和公式,所以大概是(O(n/2))(口胡的时间复杂度)

#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
	scanf("%d",&n);
	int ans=0;
	for(register int i=n-1;i>=0;i-=2){
		ans+=i;
	}
	cout<<ans;
	return 0;
}
原文地址:https://www.cnblogs.com/Poetic-Rain/p/13574202.html