本文主要是介绍Recording题集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
阶段1000-1300
Problem - 2002C - Codeforces
//如果圆比点先到,则不可能进入
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define pii pair<int,int>
signed main() {const int N = 1e5 + 7;//最多一个循环pii arr[N], from, to;int a, b, n;int nn; cin >> nn; while (nn--) {cin >> n;int i = -1; while (++i < n) {cin >> a >> b;arr[i] = { a,b };}cin >> a >> b; from = { a,b };cin >> a >> b; to = { a,b };auto dic = [&](pii t) {//点t到终点to的距离的平方return (to.first-t.first)*(to.first - t.first)\+ (to.second-t.second)*(to.second - t.second);};int limit = dic(from);// printf("limit的值%lld\n", limit);i = -1; while (++i < n) {int th = dic(arr[i]);//当数据很大且二者相近时,分不出区别// cout<<th<<endl;if (th<=limit) {i = -1;// printf("这里(%d,%d)超了,为%lld\n", arr[i].first, arr[i].second, th);break;}}if (i == -1)cout << "NO" << endl;else cout << "YES" << endl;}
}
Problem - 1999E - Codeforces
这里Find难判断,容易错,实际上是向下取整而不是四舍五入,剩下的就是对暴力的优化了
可以用前缀和,然后还可以建立一个f组来存边界提前打表,用二分来优化那个递归,虽然没什么必要
auto Find=[&](int x){//查看x到0需要几步
return lower_bound(f,f+tt,x)-f;
};
#include<bits/stdc++.h>
using namespace std;
int main(){const int N=2*1e5+7;int nn;cin>>nn;//填充fint s[N];s[0]=0;auto Find=[&](int x){int cnt=0;while(x){x/=3;cnt++;}return cnt;};for(int i=1;i<N;i++){s[i]=s[i-1]+Find(i);}while(nn--){int l,r;cin>>l>>r;int ans=s[l]-s[l-1];cout<<ans*2+s[r]-s[l]<<endl;}
}
这篇关于Recording题集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!