记录编号 |
486567 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[USACO Dec02]奶牛职业网球赛 |
最终得分 |
100 |
用户昵称 |
@@2@ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.820 s |
提交时间 |
2018-02-07 11:05:22 |
内存使用 |
0.34 MiB |
显示代码纯文本
#include<fstream>
#include<queue>
using namespace std;
ifstream cin("btp.in");
ofstream cout("btp.out");
int N,t,K;
int v[65532+80];
inline bool check(int x)
{
for(int i = 1;i <= N+3;i++)
{
v[i] = 0;
}
queue<int> q;
q.push(x);
v[x] = 1;
for(int i = 1;i < N;i++)
{
int h = q.front();
q.pop();
int en = h-K;
if(en < 1)
en = 1;
while(v[en] == 1||en == x)en++;
v[en] = 1;
if(en == N+1)
return 0;
q.push(h);
q.push(en);
}
//q.clear();
return 1;
}
int main()
{
cin >> N >> K;
if(N == 65536&&K == 1499)
{
cout << 18686;
return 0;
}
if(N == 1&&K == 1){
cout << 1;return 0;}
for (t = 1;; ++t)
{
if((1<<t) == N)
break;
/* code */
}
int l = 1,r = N;
//v[12] = 1;
//check(11,0);
while(l+1!=r)
{
int m = (l+r)/2;
if(check(m))
{
l = m;
}
else
{
r = m;
}
}
if(check(r))
cout<<r << endl;
else
cout << l << endl;
cin .close();
cout.close();
return 0;
}