QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#256019 | #5537. Storing Eggs | Heh | WA | 2ms | 4036kb | C++14 | 5.6kb | 2023-11-18 17:43:56 | 2023-11-18 17:43:58 |
Judging History
answer
#include<bits/stdc++.h>
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <chrono>
#include <cmath>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <vector>
using namespace std;
typedef int ll;
typedef vector<int> vi;
typedef pair<ll,ll> pll;
typedef pair<int, int> pii;
typedef vector<pii> vii;
typedef vector<vector<int> > vvi;
typedef vector<string> vs;
#define fi first
#define se second
#define rep(i,l,r) for(int i=l;i<=r;++i)
#define per(i,r,l) for(int i=r;i>=l;--i)
#define rep0(i,l,r) for(int i=l;i<r;++i)
#define forn(i,n) for(int i=0;i<n;++i)
#define all(a) (a).begin(), (a).end()
#define allr(a) (a).rbegin(), (a).rend()
#define foreach(a) for(auto it = a.begin(); it != a.end(); it++)
#define mem(a,b) memset(a, (b), sizeof(a))
//mt19937_64 gen(chrono::steady_clock::now().time_since_epoch().count());
//uniform_int_distribution<ll> rnd(0,LLONG_MAX);
template<typename T>
inline T cei(T x, T y) {
T t = (x+y-1)/y;
return t;
}
template<typename T>
inline T power(T base, T powerRaised) {
if (powerRaised != 0) return (base*power(base, powerRaised-1));
else return 1;
}
template<typename T>
inline T gcd(T a, T b) {
while(b) {
b^=a^=b^=a%=b;
}
return a;
}
template<typename T>
inline T lcm(T x, T y ) {
return x*y/gcd(x,y);
}
template<typename T>
inline T findLessPower(T base, T n) {
if(n==1) {
return 0;
}
T temp = log(n)/log(base);
if(power(base, temp) == n) {
return temp-1;
} else {
return temp;
}
}
const ll mod1=1e9+7;
const ll mod2=1e9+9;
const ll INF=1e9+5;
const ll maxN=2e5+5;
const ll MAXLEN=1e6+5;
ll gcdl(ll a,ll b) {
if(a==0||b==0) {
return abs(a+b);
}
return gcdl(b%a,a);
}
//ll lcml(ll a,ll b) {
// if(a>=INF||b>=INF) {
// return INF;
// }
// ll ans=a*b/gcdl(a,b);
// if(ans>=INF) {
// return INF;
// }
// return ans;
//}
ll mo(ll a,ll b,ll mod) {
if(b==0) {
return 1ll;
}
ll vmod;
vmod=mo(a,b/2,mod);
vmod=(vmod*vmod)%mod;
if(b%2==0) {
return vmod;
}
return (vmod*a)%mod;
}
ll segtree[4*maxN];
ll lazy[4*maxN];
void push(ll v,ll l,ll r,ll mid){
if(lazy[v]!=0){
segtree[2*v]+=(mid-l+1)*lazy[v];
segtree[2*v+1]+=(r-mid)*lazy[v];
lazy[2*v]+=lazy[v];
lazy[2*v+1]+=lazy[v];
lazy[v]=0;
}
}
void update(ll number,ll tl,ll tr,ll pos, ll val){
if(tl==tr){
segtree[number]+=val;
return;
}
ll mid=(tl+tr)/2;
if(pos<=mid){
update(2*number,tl,mid,pos,val);
}
else{
update(2*number+1,mid+1,tr,pos,val);
}
segtree[number]=segtree[2*number]+segtree[2*number+1];
}
void build(ll number, ll a[],ll tl,ll tr){
lazy[number]=0;
if(tl==tr){
segtree[number]=a[tl];
return;
}
ll mid=(tl+tr)/2;
build(2*number,a,tl,mid);
build(2*number+1,a,mid+1,tr);
segtree[number]=max(segtree[number*2],segtree[number*2+1]);
}
ll query(ll number,ll tl,ll tr,ll l ,ll r){
if(l>r){
return -1;
}
if(l<=tl&&r>=tr){
return segtree[number];
}
ll mid=(tl+tr)/2;
return max(query(2*number,tl,mid,l,min(r,mid)),query(2*number+1,mid+1,tr,max(mid+1,l),r));
}
ll mu2(ll x){
return x*x;
}
void solve(ll tc) {
ll i,j,n,m,k,prev,j1;
cin >> n >> m;
string s[3];
cin >> s[0] >> s[1] >> s[2];
ll num=0;
for(i=0;i<3;i++){
for(j=0;j<n;j++){
if(s[i][j]=='.'){
num++;
}
}
}
if(num<m){
cout << -1;
return;
}
ll l,r,mid;
l=1;
r=n*n+6;
ll dp[n+1][8],mxdp[n+1];
while(l<r){
mid=(l+r+1)/2;
//cout << l << " " << r << "\n";
ll sq=sqrt(mid-1);
ll sq1=sq-1;
for(j=0;j<8;j++){
dp[0][j]=-INF;
}
mxdp[0]=0;
dp[0][0]=0;
for(i=1;i<=n;i++){
dp[i][0]=mxdp[i-1];
mxdp[i]=dp[i][0];
for(j=1;j<8;j++){
dp[i][j]=-INF;
vector<ll> onesj;
bool able=true;
for(k=0;k<3;k++){
if((j>>k)%2==1){
onesj.push_back(k);
if(s[k][i-1]=='#'){
able=false;
}
}
}
for(k=0;k+1<onesj.size();k++){
if((onesj[k+1]-onesj[k])*(onesj[k+1]-onesj[k])<mid){
able=false;
}
}
if(!able){
dp[i][j]=-INF;
continue;
}
dp[i][j]=(ll)onesj.size();
if(i>=sq+1){
dp[i][j]=max(dp[i][j],mxdp[i-sq-1]+(ll)onesj.size());
}
if(i>sq&&sq>0){
for(j1=1;j1<8;j1++){
vector<ll> onesj1;
for(k=0;k<3;k++){
if((j1>>k)%2==1){
onesj1.push_back(k);
}
}
able=true;
for(auto k:onesj){
for(auto k1:onesj1){
if(mu2(k-k1)+mu2(sq)<mid){
able=false;
}
}
}
if(able&&dp[i-sq][j1]>=0){
dp[i][j]=max(dp[i][j],dp[i-sq][j1]+(ll)onesj.size());
}
}
}
if(i>sq1&&sq1>0){
for(j1=1;j1<8;j1++){
vector<ll> onesj1;
for(k=0;k<3;k++){
if((j1>>k)%2==1){
onesj1.push_back(k);
}
}
able=true;
for(auto k:onesj){
for(auto k1:onesj1){
if(mu2(k-k1)+mu2(sq1)<mid){
able=false;
}
}
}
if(able&&dp[i-sq1][j1]>=0){
dp[i][j]=max(dp[i][j],dp[i-sq1][j1]+(ll)onesj.size());
}
}
}
mxdp[i]=max(mxdp[i],dp[i][j]);
}
//cout << mxdp[i] << " ";
}
//cout << "\n";
if(mxdp[n]>=m){
l=mid;
}
else{
r=mid-1;
}
}
cout << fixed << setprecision(9) << sqrt(l);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll c,i,j;
c=1;
//cin >> c;
for(i=1;i<=c;i++){
solve(i);
}
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 3792kb
input:
5 2 #.... ..... ....#
output:
4.472135955
result:
ok found '4.4721360', expected '4.4721360', error '0.0000000'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3884kb
input:
5 6 ##.## ##### .....
output:
1.000000000
result:
ok found '1.0000000', expected '1.0000000', error '0.0000000'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3820kb
input:
3 4 ..# ... ...
output:
1.414213562
result:
ok found '1.4142136', expected '1.4142140', error '0.0000003'
Test #4:
score: 0
Accepted
time: 0ms
memory: 3624kb
input:
2 6 .. .# ..
output:
-1
result:
ok found '-1.0000000', expected '-1.0000000', error '-0.0000000'
Test #5:
score: 0
Accepted
time: 0ms
memory: 3804kb
input:
1 2 . . .
output:
2.000000000
result:
ok found '2.0000000', expected '2.0000000', error '0.0000000'
Test #6:
score: 0
Accepted
time: 1ms
memory: 4036kb
input:
100 2 .................................................................................................... .................................................................................................... ...............................................................................................
output:
99.020199959
result:
ok found '99.0202000', expected '99.0202000', error '0.0000000'
Test #7:
score: 0
Accepted
time: 2ms
memory: 3852kb
input:
100 3 .................................................................................................... .................................................................................................... ...............................................................................................
output:
49.040799341
result:
ok found '49.0407993', expected '49.0407990', error '0.0000000'
Test #8:
score: -100
Wrong Answer
time: 2ms
memory: 3740kb
input:
100 100 .................................................................................................... .................................................................................................... .............................................................................................
output:
2.236067977
result:
wrong answer 1st numbers differ - expected: '2.0000000', found: '2.2360680', error = '0.1180340'