這道題別看題面這麼長,其實題意很簡單
就是讓你求從起點開始的最長合法區間
合法的要求有兩個:兜圈子和直飛
且這兩個條件相互獨立
(也就是說兜圈子的末尾不會對下面可能出現的直飛造成影響)
舉個例子:
1 2 3 2 1 5 4 3 8 9
這個序列他的合法長度是8
因為直飛是 5 4 3 8 9
1是兜圈子的末尾,對直飛無影響
這樣看來,兜圈子比直飛優秀的多
因為如果直飛的某段屬於兜圈子
那麼把這一段歸於兜圈子後對序列的合法性無影響
但如果兜圈子的某段屬於直飛,那歸於直飛後
剩下的這部分可能就不是兜圈子了
所以我們先用manacher跑出回文區間
用差分陣列維護一下回文區間
如果在回文區間內,則不考慮
否則判斷是否直飛即可
只要確保完全符合,就記下來這個區間和這個區間的末尾值
後面的就是貪心了
最優情況自然是你選的那條正好是飛船所在
飛船所在正好是最短的
最壞情況是你最後一次選到的是最短的
且這個位置是飛船所在
機率我們會驚訝的發現其實是一樣的
排個序第二個也很好求
#include#include#include
#include
#define rii register int i
#define rij register int j
#define mod 19260817
using
namespace
std;
char s[200005],cp[200005
];int p[200005],cd,t,n,ans,cnt,jl[105],cf[200005
],lnt;
char zcq1[200005
];int zcq2[200005
],m;
void
ycl()
cp[k]='#'
; k++;
cd=k;
}void
manacher()
else
while(cp[i+p[i]]==cp[i-p[i]])
if(p[i]+i>mx)
}}void
cfs()
}}int
yz()
if(pd==0
)
else
else
}pre=zcq1[i];
continue
; }
if(pd==1
)
else
}if(pd==2
)
else}}
else
}return cnt+1;}
long
long pw(long
long ds,int
ms)
else
}return
res;
}bool cmp(int kl,int
lk)void
sr()
getchar();
getchar();
}void
fz()
}int
main()
//printf("%d\n",ans-1);
}
if(lnt==0
)
if(lnt==1
)
sort(jl+1,jl+lnt+1
,cmp);
int minx=jl[1
];//
jl[1];
int ant=1
;
long
long js=0
;
for(rii=2;i<=lnt;i++)
else
}for(rii=2;i<=lnt;i++)
js*=2
; js+=minx;
cout
<"
"<"";
double kn=((1.0)*ant)/lnt;
kn/=lnt;
printf(
"%.8lf %.8lf
",kn,kn);
}
4 5 Daniel13265 的公開賽
4.5 daniel13265 的公開賽 題目鏈結 官方題解 戳這裡居然沒有官方 暴力做法 分奇偶形式的對稱數列,1e3資料 n2搞定,但是wa了 不知道為啥qwq include include include const int mod 1e9 7 using namespace std int...
HDOJ2009暑期集訓公開賽(6)
暑期集訓公開賽 6 source 1 2946 letter cookies ac.其實這是一道很簡單的提,當初 也是很快寫出了,但可惡的是竟然看錯了輸入格式,導致一直re.以後開始做題時要弄清楚格式。2948 geometry darts 賽後ac.由於上面那題花的時間過多之間導致這題的時間不夠,...
Robot杯全國機械人公開賽
這是大學的時候參加的乙個比賽。robot杯全國機械人公開賽。做的是搬運機械人。屬於光電組的。大概有乙個月都在準備這個比賽。我和儀器與電子學院的培松同學。資訊與通訊工程學院的彥宗同學遍歷了從硬體設計。到軟體編寫。過程艱辛。硬體 晶元用的是stm 32。加上機械人的乙個框架。搬運用的手臂是兩個舵機加上兩...