| 題號 | 題目 |
|---|---|
| T1 | 平面上的直線 |
| T2 | 有趣的水管 |
| T3 | 小C的作業題 |
| T4 | 租車去春游 |
| T5 | 排數字 |
| 得分 | 185/205 |
T1
思路
未做出,
T2
思路
本題是一個二分,可以做到
O
(
log
?
2
k
)
O(\log_2{k})
O(log2?k).
我們可以從
k
=
1
k=1
k=1 的情況開始推式子,
從
1
?
k
?
1
~1?k-1
1?k?1 二分一個
m
i
d
mid
mid, 由等引數列求和公式可得
m
i
d
mid
mid 的貢獻是:
(
m
i
d
?
k
)
?
(
m
i
d
?
1
)
?
(
m
i
d
?
1
)
?
m
i
d
2
(mid*k)-(mid-1)-\frac{(mid-1)*mid}{2}
(mid?k)?(mid?1)?2(mid?1)?mid?
對于
>
=
n
>=n
>=n 的情況維護答案即可,
代碼:
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long n,k,js,ans=-1;
int main()
{
cin>>n>>k;
if(n==1)
{
cout<<0;
return 0;
}
if(n<=k)
{
cout<<1;
return 0;
}
long long l=1,r=k-1,mid=0;
while(l<=r)
{
mid=(l+r)/2;
js=(mid*k)-(mid-1)-(mid-1)*mid/2;
if(js>=n)
r=mid-1,ans=mid;
else
l=mid+1;
}
cout<<ans;
return 0;
}
T3
思路
未做出,
T4
思路
未做出
T5
思路
博弈論,取每行的次大中的最大,
具體思路請看 luogu P1199 三國游戲的第一篇題解
代碼
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n,a[1010][1010],ans;
int main()
{
cin>>n;
for(int i=1; i<n; i++)
for(int j=i+1; j<=n; j++)
cin>>a[i][j],a[j][i]=a[i][j];
for(int i=1; i<=n; i++)
{
sort(a[i]+1,a[i]+1+n);
ans=max(ans,a[i][n-1]);
}
cout<<1<<endl<<ans;
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/197097.html
標籤:其他
