结论
scanf比cin快
因为scanf告知了数据的类型,而cin需要花时间去查找数据的类型
fun1
每段(1, 10, 100…)的开头一位是1,其余都是0
用高斯求和的公式判断给出的数字是否是某一段的第一位
这里一开始用cin,最后一个测试点一直超时,改用scanf就好了
#include<iostream>
#include<math.h>
using namespace std;
int main(){
int n;
scanf("%d", &n);
for(int i=0;i<n;i++){
int x;
scanf("%d", &x);
if(x==1||x==2){
cout<<"1\n";
continue;
}
int p = sqrt((x)*2);
if((p+1)*p/2+1==x)cout<<"1\n";
else cout<<"0\n";
}
}
fun2
发现了华点
空间换时间的感觉(初试赋值也挺耗时间)
用个bool数组把所有的1都记录下来
简单粗暴
#include <iostream>
using namespace std;
const int MAX=1e9;
//int arr[MAX]={0};
bool arr[MAX]={false};
int main(){
int n,i=0,num;
for(int pos=1;pos<MAX;pos+=i){
arr[pos]=true;
i++;
}
scanf("%d",&n);
// cin>>n;
for(int k=0;k<n;k++){
// cin>>num;
scanf("%d",&num);
if(arr[num]) printf("1\n"); //cout<<"1\n";
else printf("0\n"); //cout<<"0\n";
}
return 0;
}