Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- █████████████.....██████....██.........█....██████████....██.........██.
- ██.........██.......██......█.█........█....██......██.....██.......██..
- ██.........██.......██......█..█.......█....██......██......██.....██...
- ██.........██.......██......█...█......█....██......██.......██...██....
- ██.........██.......██......█....█.....█....██......██........██.██.....
- ██.........██.......██......█.....█....█....██......██.........███......
- █████████████.......██......█.....█....█....██████████.........███......
- ██..................██......█......█...█....██......██.........███......
- ██..................██......█......█...█....██......██.........███......
- ██..................██......█.......█..█....██......██.........███......
- ██..................██......█.......█..█....██......██.........███......
- ██..................██......█........█.█....██......██.........███......
- ██..................██......█........█.█....██......██.........███......
- ██................██████....█.........██....██......██.........███......
- ЗАПУСКАЕМ
- ░ГУСЯ░▄▀▀▀▄░РАБОТЯГУ░░
- ▄███▀░◐░░░▌░░░░░░░
- ░░░░▌░░░░░▐░░░░░░░
- ░░░░▐░░░░░▐░░░░░░░
- ░░░░▐░░░░░▐░░░░░░░
- ░░░░▐░░░░░▐░░░░░░░
- ░░░░▐░░░░░▐░░░░░░░
- ░░░░▐░░░░░▐░░░░░░░
- ░░░░▐░░░░░▐░░░░░░░
- ░░░░▐░░░░░▐░░░░░░░
- ░░░░▐░░░░░▐░░░░░░░
- ░░░░▌░░░░░▐▄▄░░░░░
- ░░░░▌░░░░▄▀▒▒▀▀▀▀▄
- ░░░▐░░░░▐▒▒▒▒▒▒▒▒▀▀▄
- ░░░▐░░░░▐▄▒▒▒▒▒▒▒▒▒▒▀▄
- ░░░░▀▄░░░░▀▄▒▒▒▒▒▒▒▒▒▒▀▄
- ░░░░░░▀▄▄▄▄▄█▄▄▄▄▄▄▄▄▄▄▄▀▄
- ░░░░░░░░░░░▌▌░▌▌░░░░░
- ░░░░░░░░░░░▌▌░▌▌░░░░░
- ░░░░░░░░░▄▄▌▌▄▌▌░░░░░
- */
- #pragma GCC optimize("Ofast,no-stack-protector")
- #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
- #pragma GCC optimize("unroll-loops")
- #pragma GCC optimize("fast-math")
- #pragma GCC optimize("section-anchors")
- #pragma GCC optimize("profile-values,profile-reorder-functions,tracer")
- #pragma GCC optimize("vpt")
- #pragma GCC optimize("rename-registers")
- #pragma GCC optimize("move-loop-invariants")
- #pragma GCC optimize("unswitch-loops")
- #pragma GCC optimize("function-sections")
- #pragma GCC optimize("data-sections")
- #pragma GCC optimize("branch-target-load-optimize")
- #pragma GCC optimize("branch-target-load-optimize2")
- #pragma GCC optimize("btr-bb-exclusive")
- #include <iostream>
- #include <vector>
- #include <cassert>
- #include <cstdio>
- #include <algorithm>
- #include <iomanip>
- #include <tuple>
- #include <math.h>
- #include <set>
- #include <stack>
- #include <map>
- #include <queue>
- #include <random>
- #define pb(x) push_back(x);
- #define endl "\n"
- #define all(x) x.begin(), x.end()
- // #define int long long
- // #define f first;
- // #define s second;
- #define DEBUG
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double ld;
- typedef vector<int> vi;
- typedef vector<vector<int> > vvi;
- typedef vector<ull> vull;
- typedef vector<ll> vll;
- typedef tuple<int, int, int> tiii;
- typedef pair<int, int> pii;
- typedef vector<pair<int, int> > vpii;
- typedef vector<bool> vb;
- typedef vector<string> vs;
- typedef vector< vector<int> > vvi;
- typedef vector<char> vc;
- const int INF = 1e9;
- const ll INFLL = 1e12;
- const int MOD = 1000000007;
- /**
- * Author: Sergey Kopeliovich (Burunduk30@gmail.com)
- */
- #define VERSION "0.1.5"
- /** Fast allocation */
- #ifdef FAST_ALLOCATOR_MEMORY
- int allocator_pos = 0;
- char allocator_memory[(int)FAST_ALLOCATOR_MEMORY];
- inline void * operator new ( size_t n ) {
- char *res = allocator_memory + allocator_pos;
- allocator_pos += n;
- assert(allocator_pos <= (int)FAST_ALLOCATOR_MEMORY);
- return (void *)res;
- }
- inline void operator delete ( void * ) noexcept { }
- //inline void * operator new [] ( size_t ) { assert(0); }
- //inline void operator delete [] ( void * ) { assert(0); }
- #endif
- /** Fast input-output */
- template <class T = int> inline T readInt();
- inline double readDouble();
- inline int readUInt();
- inline int readChar(); // first non-blank character
- inline void readWord( char *s );
- inline bool readLine( char *s ); // do not save '\n'
- inline bool isEof();
- inline int getChar();
- inline int peekChar();
- inline bool seekEof();
- inline void skipBlanks();
- template <class T> inline void writeInt( T x, char end = 0, int len = -1 );
- inline void writeChar( int x );
- inline void writeWord( const char *s );
- inline void writeDouble( double x, int len = 0 );
- inline void flush();
- static struct buffer_flusher_t {
- ~buffer_flusher_t() {
- flush();
- }
- } buffer_flusher;
- /** Read */
- static const int buf_size = 4096;
- static unsigned char buf[buf_size];
- static int buf_len = 0, buf_pos = 0;
- inline bool isEof() {
- if (buf_pos == buf_len) {
- buf_pos = 0, buf_len = fread(buf, 1, buf_size, stdin);
- if (buf_pos == buf_len)
- return 1;
- }
- return 0;
- }
- inline int getChar() {
- return isEof() ? -1 : buf[buf_pos++];
- }
- inline int peekChar() {
- return isEof() ? -1 : buf[buf_pos];
- }
- inline bool seekEof() {
- int c;
- while ((c = peekChar()) != -1 && c <= 32)
- buf_pos++;
- return c == -1;
- }
- inline void skipBlanks() {
- while (!isEof() && buf[buf_pos] <= 32U)
- buf_pos++;
- }
- inline int readChar() {
- int c = getChar();
- while (c != -1 && c <= 32)
- c = getChar();
- return c;
- }
- inline int readUInt() {
- int c = readChar(), x = 0;
- while ('0' <= c && c <= '9')
- x = x * 10 + c - '0', c = getChar();
- return x;
- }
- template <class T>
- inline T readInt() {
- int s = 1, c = readChar();
- T x = 0;
- if (c == '-')
- s = -1, c = getChar();
- else if (c == '+')
- c = getChar();
- while ('0' <= c && c <= '9')
- x = x * 10 + c - '0', c = getChar();
- return s == 1 ? x : -x;
- }
- inline double readDouble() {
- int s = 1, c = readChar();
- double x = 0;
- if (c == '-')
- s = -1, c = getChar();
- while ('0' <= c && c <= '9')
- x = x * 10 + c - '0', c = getChar();
- if (c == '.') {
- c = getChar();
- double coef = 1;
- while ('0' <= c && c <= '9')
- x += (c - '0') * (coef *= 1e-1), c = getChar();
- }
- return s == 1 ? x : -x;
- }
- inline void readWord( char *s ) {
- int c = readChar();
- while (c > 32)
- *s++ = c, c = getChar();
- *s = 0;
- }
- inline bool readLine( char *s ) {
- int c = getChar();
- while (c != '\n' && c != -1)
- *s++ = c, c = getChar();
- *s = 0;
- return c != -1;
- }
- /** Write */
- static int write_buf_pos = 0;
- static char write_buf[buf_size];
- inline void writeChar( int x ) {
- if (write_buf_pos == buf_size)
- fwrite(write_buf, 1, buf_size, stdout), write_buf_pos = 0;
- write_buf[write_buf_pos++] = x;
- }
- inline void flush() {
- if (write_buf_pos) {
- fwrite(write_buf, 1, write_buf_pos, stdout), write_buf_pos = 0;
- fflush(stdout);
- }
- }
- template <class T>
- inline void writeInt( T x, char end, int output_len ) {
- if (x < 0)
- writeChar('-'), x = -x;
- char s[24];
- int n = 0;
- while (x || !n)
- s[n++] = '0' + x % 10, x /= 10;
- while (n < output_len)
- s[n++] = '0';
- while (n--)
- writeChar(s[n]);
- if (end)
- writeChar(end);
- }
- inline void writeWord( const char *s ) {
- while (*s)
- writeChar(*s++);
- }
- inline void writeDouble( double x, int output_len ) {
- if (x < 0)
- writeChar('-'), x = -x;
- assert(x <= (1LLU << 63) - 1);
- long long t = (long long)x;
- writeInt(t), x -= t;
- writeChar('.');
- for (int i = output_len - 1; i > 0; i--) {
- x *= 10;
- t = std::min(9, (int)x);
- writeChar('0' + t), x -= t;
- }
- x *= 10;
- t = std::min(9, (int)(x + 0.5));
- writeChar('0' + t);
- }
- signed main(){
- int n, k, l;
- n = readInt();
- k = readInt();
- l = readInt();
- vpii left;
- vpii right;
- vi beta;
- vector<double> answer(k, 0);
- int cnt = 0;
- for(int i=0; i<n; i++){
- int a, b;
- char c;
- a=readInt();
- b=readInt();
- c=readChar();
- if(c=='L'){
- beta.pb(cnt);
- left.pb(make_pair(a, b));
- } else{
- cnt++;
- answer[b]+=(l-a);
- right.pb(make_pair(a, b));
- }
- }
- for(int i=0; i<left.size(); i++){
- double last = left[i].first;
- for(int j=beta[i]-1; j>=0; j--){
- answer[left[i].second] += (last-(right[j].first+left[i].first-last))/2.0;
- last = (left[i].first+right[j].first)/2.0;
- left[i].second = (right[j].second+left[i].second)%k;
- }
- answer[left[i].second]+=last;
- }
- for(ld kek:answer)
- writeDouble(kek);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement