分类讨论的一道题!主要是分多种可能这件事让人有点烦……
但目前发现不是正解,麻烦大家一起思考一下有没有什么问题
(为了不让同学们看到错误的思路,我自己给自己点了个踩)
#include <bits/stdc++.h>
using namespace std;
int len, sum[100010], tot, res, k = 0x3f3f3f3f, ans, l, r;
string s;
int main(){
cin >> len >> s;
int t = 0;
for (int i = 0; i < len; i++) {
t++;
if (s[i] == '1') sum[++tot] = t, t = 0; //t表示当前这个1与前面那个的距离,记录并更新t
} tot++; sum[tot] = t; //处理最后一次
l = sum[1]; r = sum[tot];
res = max(sum[1] >> 1, sum[tot] >> 1); //都在头,都在尾取最大值
for (int i = 2; i < tot; i++) k = min(k, sum[i]);
res = max(res, min(sum[1] - 1, sum[tot])); //一个在头,一个在尾
sort(sum + 1, sum + 1 + tot);
ans = max(max(sum[tot] / 3, min(sum[tot] >> 1, sum[tot - 1] >> 1)), res);
int t1 = sum[tot] >> 1, t2 = sum[tot] >> 1;
if (sum[tot] == l) t1 = sum[tot - 1] >> 1;
if (sum[tot] == r) t2 = sum[tot - 1] >> 1;
ans = max(ans, max(min(l - 1, t1), min(r, t2)));
printf("%d", min(k, ans));
return 0;
}
我的代码也是分类讨论,但是好像没问题诶
这份代码,被最新的数据卡了
en,所以我才说不是正解啊……
分类贪心是对的,只是你的代码写的有问题而已,可以改一下再展示出来。
oo好滴谢谢
哈哈,不是正解都有那么多赞
呜呜呜被讽刺了
我好像没有讽刺你的意思吧我的正解+详解都没你点赞多### 这是实话
# 可恶,被别人嘲讽了
# $\Huge{?}$
###
我一个蒟蒻还敢嘲讽大佬??这个数据能hack掉你把?
都没发现代码有问题吗?
tql
我******一个个都来怼我什么意思啊……没人怼你啊只是指出代码有问题,13行一个比较明显的问题,没人发现所以比较奇怪。
好吧。。。。。。。。。。。。。。。。。。。。。。。。。。。。
题解写的很不错
em
int t1 = sum[tot] >> 1, t2 = sum[tot] >> 1;
if (sum[tot] == l) t1 = sum[tot - 1] >> 1;
if (sum[tot] == r) t2 = sum[tot - 1] >> 1;
这三句啥意思
来啦来啦
min(r,t2)是什么情况?
在看了在看了hh,再等等吧,很久以前做的,要先回顾一下题面
min(r-1,t2)也能AC
r就是最后的哪一个啊
一旦最后的区间放一头牛,距离就应该是r-1
em……有点道理,这是我和我
万恶的同学讨论的结果,我还会再考虑下hh还要考虑最大的区间就是两端的情况
放两端、最大的区间放两个,最大、次大的区间各放一个
那个样例看不懂啊,不是应该D=1吗,最小的是1
大佬,求解
求最大的D
那最大的话,我插的时候不能靠边插让它最大吗,比如可以4呢
放两头牛
10101101000010 对,放两头牛,这样不就4了
最小值最大
在这个例子中,Farmer John 可以以这样的方式加入奶牛,使得牛栏分配变为 $10x010010x0010$,其中$ x $表示新来的奶牛。
此时 $D=2$。
不可能在加入奶牛之后取到更大的 $D$ 值。
哦,就是最优的情况下取最大
大佬,我还是没忍住点进来了,因为继几天的题摸鱼顺利通过之后我今天再次不会了,我感觉插进去计数更新好麻烦啊(手动捂脸 😂)
ans = max(ans, max(min(l - 1, t1), min(r, t2)));min(r,t2)我没理解
好的等下哈,我现在有事,等下给您解答
说好听点,作业还没写完大佬六年级!太厉害了!崇拜!
已经有几次没看你的题解了哈哈哈,因为这几次都会写,但是还是谢谢你!
hh
加油!
加油加油
ans = max(ans, max(min(l - 1, t1), min(r, t2)));这里是不是应该是r-1?
为什么呀
没理解min(r,t2)