NC23925. 蹲着还是站着?
描述
输入描述
输入数据为T组数据(1<=T<=10)。
每组数据输入包含三个数字N,A,B(1<=N<=1000000,1<=A<B<=N)。
输出描述
对于每组数据,输出一个整数,表示从第A个人到第B个人之间有多少人站着。
示例1
输入:
1 5 1 3
输出:
2
C(clang 3.9) 解法, 执行用时: 3ms, 内存消耗: 232K, 提交时间: 2019-04-11 12:00:09
#include<stdio.h> #include<math.h> int main() { int t; scanf("%d",&t); long n,a,b,a1,b1; while(t--) { scanf("%ld%ld%ld",&n,&a,&b); a1=sqrt(a); if(a1*a1!=a) a1++; b1=sqrt(b)+1; printf("%ld\n",b-a+1-b1+a1); } return 0; }
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 476K, 提交时间: 2019-04-08 10:05:57
#include<iostream> using namespace std; int t,n,a,b,s[1000006]; int main() { cin>>t; while(t--) { cin>>n>>a>>b; int j=1; int cnt=b-a+1; while(j*j<=b) { if(j*j>=a) cnt--; j++; } cout<<cnt<<endl; } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 352K, 提交时间: 2020-05-29 20:17:42
#include<bits/stdc++.h> using namespace std; int i,j,n,m,a,b,s; int main(){ scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d%d%d",&m,&a,&b); s=b-a+1; for(j=1;j*j<=b;j++){ if(j*j>=a){s--; } } printf("%d\n",s); } }