赛时:I,J (太废物了,只签到了)
目录
I:(二分)
题解:
我觉得这道题很容易想到二分,只不过写不出来的可能是check函数写超时了,check函数其实可以做到O(1)的。
#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define int long long
#define double long double
#define Int __int128
#define pb push_back
#define eb emplace_back
#define MAX_LOG 21
#define ff first
#define ss second
#define M 5005
#define ull unsigned long long
using namespace std;
const double PI=3.1415926535897932385;
const ll LLMAX=9223372036854775807ll;
const ll LLMIN=-9223372036854775808ll;
//const int MAX_INT=0x3f3f3f3f;
const int IIMAX=2147483647;
const int IIMIN=-2147483648;
const int INF=0x3f3f3f3f;
typedef pair<ll,ll> PLL;
typedef pair<int,int>PII;
ll gcd(ll a,ll b)
{
if(b) while((a%=b)&&(b%=a));
return a+b;
}//最大公约数函数
ll spid(ll a,ll b,ll p)
{
ll ans=1;
while(b)
{
if(b&1)ans=ans*a%p;
b>>=1;
a=a*a%p;
}
return ans;
}//快速幂函数
///泡沫在阳光下闪烁,像星辰在寂静得夜空中闪耀
///秋雨
const ll N=2e5+10;
void solve()
{
ll m,k,h;
cin>>m>>k>>h;
ll l=0,r=h;
while(l<r)
{
ll mid=l+r>>1;
auto check=[&](ll mid)->bool
{
ll cnt=mid;
ll cut=cnt;
// if(cnt<m)cout<<cnt<<'\n';
if(cnt<m)return cut>=h;
if(m==k)return 1;
// if(m==k)cout<<"de\n";
ll del=m-k;
ll t=(cnt-m)/del+1;
// cout<< mid+k*t<<'\n';
return mid+k*t>=h;
};
// cout<<"cehck"<<mid<<' ';
if(check(mid))r=mid;
else l=mid+1;
}
cout<<l<<'\n';
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
cin>>t;
while(t--)
{
solve();
}
}
///在秋天邂逅, 在春天发芽,在夏天壮大,在秋天萧瑟,在冬天萎缩,
///而后,春天再度归来。
J:
题意:
给一根左端点在原点,右端点在(l,0)的点的棍子,给你一个点,问存不存在一个轴(在棍子上)让棍子转起来能扫到这个点。
解题思路:
画了一下,就发现中间点画出来的圆明显半径小,而且范围也小,根本不能和两个端点比,那么就判一下轴点在两个端点的情况即可。
#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define int long long
#define double long double
#define Int __int128
#define pb push_back
#define eb emplace_back
#define MAX_LOG 21
#define ff first
#define ss second
#define M 5005
#define ull unsigned long long
using namespace std;
const double PI=3.1415926535897932385;
const ll LLMAX=9223372036854775807ll;
const ll LLMIN=-9223372036854775808ll;
//const int MAX_INT=0x3f3f3f3f;
const int IIMAX=2147483647;
const int IIMIN=-2147483648;
const int INF=0x3f3f3f3f;
typedef pair<ll,ll> PLL;
typedef pair<int,int>PII;
ll gcd(ll a,ll b)
{
if(b) while((a%=b)&&(b%=a));
return a+b;
}//最大公约数函数
ll spid(ll a,ll b,ll p)
{
ll ans=1;
while(b)
{
if(b&1)ans=ans*a%p;
b>>=1;
a=a*a%p;
}
return ans;
}//快速幂函数
///泡沫在阳光下闪烁,像星辰在寂静得夜空中闪耀
///秋雨
const ll N=2e5+10;
void solve()
{
double l,x,y;cin>>l>>x>>y;
double len=x*x+y*y;
if(len<=l*l)
{
cout<<"Yes\n";
cout<<0<<'\n';
return;
}
x=x-l;
len=x*x+y*y;
if(len<=l*l)
{
cout<<"Yes\n";
cout<<l<<'\n';
return;
}cout<<"No\n";
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
cin>>t;
while(t--)
{
solve();
}
}
///在秋天邂逅, 在春天发芽,在夏天壮大,在秋天萧瑟,在冬天萎缩,
///而后,春天再度归来。