結果
| 問題 |
No.576 E869120 and Rings
|
| コンテスト | |
| ユーザー |
ojisan_IT
|
| 提出日時 | 2017-10-13 22:56:14 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,408 bytes |
| コンパイル時間 | 1,300 ms |
| コンパイル使用メモリ | 99,420 KB |
| 実行使用メモリ | 30,940 KB |
| 最終ジャッジ日時 | 2024-11-17 11:40:45 |
| 合計ジャッジ時間 | 60,022 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 5 TLE * 22 |
ソースコード
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
#include<tuple>
#include<string>
#include<sstream>
#include<cmath>
#include<climits>
#include<algorithm>
#include<bitset>
#include<set>
#include<stack>
#include<queue>
#include<iomanip>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
#define rep(i,n) for(ll i=0;i<(n);i++)
#define tii tuple<int,int>
#define tiii tuple<int,int,int>
#define mt make_tuple
#define pb push_back
#define ALL(a) (a).begin(),(a).end()
#define FST first
#define SEC second
const int INF = (INT_MAX/2);
const ll LLINF = (LLONG_MAX/2);
const double eps = 1e-5;
const double PI = M_PI;
#define DEB cerr<<"!"<<endl
#define SHOW(a,b) cerr<<(a)<<" "<<(b)<<endl
#define SHOWARRAY(ar,i,j) REP(a,i)REP(b,j)cerr<<ar[a][b]<<((b==j-1)?((a==i-1)?("\n\n"):("\n")):(" "))
#define DIV 1000000007
inline ll pow(ll x,ll n,ll m){ll r=1;while(n>0){if((n&1)==1)r=r*x%m;x=x*x%m;n>>=1;}return r%m;}
class segtree{
public:
int Node;
vector<int> table;
segtree(int);
int ope(const int,const int);
void update(int index,const int value){ // index is 0-indexed.
index += Node; // query function
table[index] = value;
while(index > 0){
index /= 2;
table[index] = ope(table[2*index],table[2*index+1]);
}
}
int find(int l, int r);
};
int segtree::find(int l,int r){ // l,r is 0-indexed.
if(l == r) return table[r+Node];
l += Node; r += Node;
int ans = 0;
for(; l <= r;l >>=1, r >>=1){
if(r == l){ans=ope(ans,table[l]); return ans;}
if(r%2 == 0) ans=ope(ans,table[r]),--r;
if(l%2) ans=ope(ans,table[l]),++l;
}
return ans;
}
segtree::segtree(int Max_Node){ // initialize
Node = 2;
while(Node < Max_Node)
Node *= 2;
table.resize(2*Node);
for(int i = Node;i < Node*2; i++)
table[i] = 0; // initialize
for(int i= Node-1; i > 0; i--)
table[i] = ope(table[i*2],table[i*2+1]);
}
int segtree::ope(const int a,const int b){
return a+b;
}
int main(){
int n,k; cin >> n >> k;
segtree st(1000000);
string s; cin >> s;
rep(i,s.size()) if(s[i] == '1') st.update(i,1);
rep(i,s.size()) if(s[i] == '1') st.update(i+s.size(),1);
double ans = 0;
rep(i,s.size()*2+1){
for(int j = k-1; i+j < s.size()*2+1; j++){
ans = max(ans,double(st.find(i,i+j))/double(j+1));
}
}
cout << fixed << setprecision(10) << ans << endl;
}
ojisan_IT