Блог пользователя Vladosiya

Автор Vladosiya, 19 месяцев назад, По-русски

1811A - Вставь цифру

Идея: senjougaharin, разработка: senjougaharin

Разбор
Решение

1811B - Конвейерные ленты

Идея: Vladosiya, разработка: senjougaharin

Разбор
Решение

1811C - Восстанови массив

Идея: MikeMirzayanov, разработка: myav

Разбор
Решение

1811D - Умка и долгий перелёт

Идея: Gornak40, разработка: Gornak40

Разбор
Решение

1811E - Живая последовательность

Идея: Aris, разработка: Aris

Разбор
Решение

1811F - Это цветок?

Идея: Vladosiya, разработка: Vladosiya

Разбор
Решение

1811G1 - Влад и правильные пути (простая версия)

Идея: Vladosiya, разработка: Vladosiya

Разбор
Решение

1811G2 - Влад и правильные пути (сложная версия)

Идея: Vladosiya, разработка: Vladosiya

Разбор
Решение
Разбор задач Codeforces Round 863 (Div. 3)
  • Проголосовать: нравится
  • +52
  • Проголосовать: не нравится

»
19 месяцев назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Auto comment: topic has been translated by Vladosiya (original revision, translated revision, compare)

»
19 месяцев назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится

Great problems! had so much fun during the contest. One of the most interesting Div 3 contest for sure. Happy coding :)

»
19 месяцев назад, # |
Rev. 3   Проголосовать: нравится +4 Проголосовать: не нравится

The contest was good. I wish div 3 and div 4 will be arranged atleast 2 — 3 times a month for beginner like me

»
19 месяцев назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Still i can't visualize problem D.

  • »
    »
    19 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    You can draw some cases for Fn=5 and Fn+1=8, you will realise that there is a dark spot for columns 4 & 5, where the answer is always false, in other case you can just now cut away the 5*5 rectangle because you had to incorporate one 5*5 rectangle, and continue so on in the recursion

    • »
      »
      »
      19 месяцев назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Sure will try tommorrow morning. Thanks, i guess i have to make a lot of diagrams and dry run each one of them.

      • »
        »
        »
        »
        19 месяцев назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Yeah I mean atleast you'll need a whole page ;)

        But there's not more than lets say 3-4 cases

  • »
    »
    19 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Here is a hint: break up the Fn by Fn+1 rectangle into a Fn by Fn square and a Fn by Fn-1 rectangle. Keep breaking the rectangle until you break up the larger rectangle entirely into squares.

»
19 месяцев назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

Can somebody give a recursive and easily understandable solution for g1/g2?

  • »
    »
    19 месяцев назад, # ^ |
    Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

    check out My solution

    solveMax is a function to find the maximum number of segments of length k, starting from index i.

    solve is a function to count the number of ways to make a path with the maximum answer.

»
19 месяцев назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Can someone explain editorial of G1?

  • »
    »
    19 месяцев назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    TBH it's a brute force with some memorization. if you find it hard you can train more on dp problems :)

    But I'm gonna try to explain anyway. (I Hope it helps beginners)

    for G1 :

    first, find the longest path :

    each segment must contain k elements of the same color. so to define a state for dp, you should indicate the current index, how many elements there are in the current segment, and what is the current segment's color.

    for each element, you try to put in the current segment if you can (if the elements in the current segment are less than k, and the color of the current index is the same as the current segment color).

    or you start a new segment from this index (if the size of the current segment is 0).

    or do nothing with the current index.

    Now you have the longest path value for each index, now make another dp to count the ways to construct a path with the optimal answer.

»
19 месяцев назад, # |
  Проголосовать: нравится +28 Проголосовать: не нравится
  • »
    »
    19 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Same with me XD .Screenshot-2023-04-05-214607

    • »
      »
      »
      19 месяцев назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится

      This was the contest i became pupil luckily. I could solve 4. This contest was kind of lucky for me. I wish I can do better in the future.

»
19 месяцев назад, # |
Rev. 4   Проголосовать: нравится +3 Проголосовать: не нравится

Can someone explain this line "and these cycles do not intersect at the vertices" in problem F, when the simple cycle intersect at the vertices?

»
19 месяцев назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Problems are seems harder than usual div3...though they are fantastic..

»
19 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

For problem C, a[i]=min(b[i],b[i+1]) at 2≤i≤n−1 is right?

  • »
    »
    19 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    that is what i want to know as well.

    • »
      »
      »
      19 месяцев назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      how to understand this example{1 7 0 1}, result given by code is {1 1 0 0 1}, 7 = max(1, 0)?

      • »
        »
        »
        »
        19 месяцев назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        i think they made a mistake

      • »
        »
        »
        »
        19 месяцев назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится

        this array b is not possible.It will not be a part of testcases They've mentioned it in solution as well.Read carefullly

»
19 месяцев назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

Interesting problem E

»
19 месяцев назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

G2 can be solved by finding the number of paths of length m for each possible m ending at each i and updating the max m divisible by k and the respective number of ways to reach max respectively. Submission: 200833766

»
19 месяцев назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

in D point number 4, don't you mean $$$F_{n-1} \le y_n < F_n$$$ ?

»
19 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

myav In the editorial for problem C, $$$a_i = min(b_i, b_{i-1})$$$ for $$$2 \le i \le n-1$$$. Please correct it.

»
19 месяцев назад, # |
Rev. 3   Проголосовать: нравится -9 Проголосовать: не нравится

Vladosiya why my solution-200898470 got TLE its same as mentioned in editorial .. the same it getting accepted in PyPy-3-200940055.During contest it got accepted in PyPy-2 but after testing i got tle and my rank reduced from 4k to 10k. It's not fair. Please look into it.

I was so close to get pupil but lost it.

BY the Way u must know PyPy-2 is faster than PyPy-3

»
19 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I can't understand the Tutorial of E ...

  • »
    »
    19 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    In the $$$9$$$ base you do not have digit $$$9$$$. In the problem you do not have digit $$$4$$$, but it is the same situation. In $$$9$$$ base: $$$1,2,3,4,5,6,7,8,10,11,12,...$$$ In problem: $$$1,2,3,5,6,7,8,9,10,11,12,...$$$

    • »
      »
      »
      4 месяца назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      is this work for any number?

      if i dont want have digit 5 so i will take base 9 and every digit more than or equal to 5 i increase it ?

»
19 месяцев назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

can Someone explain D, i really can't wrap my head around bunch of inequalities given in the tutorial!

»
19 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

For A, why does the O(n) solution run out?200968450

It is guaranteed that the sum of n for all test cases does not exceed $$$2⋅10^5$$$ . My English is so poor that I can't understand the meaning of this sentence.

  • »
    »
    19 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    You wrote "const int N = 100010; ", but N can be 200000. If you increase, you will solve the problem.

»
19 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Another approach to solve E 1)Let our initial answer be k itself. 2)Now count the no of numbers which contain 4 until k. 3)Add this count to k(our new ans). 4)Now count the no of numbers which contain 4 until our new answer and subtract this count by previous count(as prev count was taken into consideration at step 3). 5)update our value of ans by adding the count. 6)Repeat until our ans is not updating to a new value.

Basically a Gauss-Seidal Approach.

200812209

  • »
    »
    19 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    is this called digit dp or digit dp is something else?

  • »
    »
    18 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    I tried this approach, but this gives TLE Code

    • »
      »
      »
      6 месяцев назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      same approach

      #include <bits/stdc++.h>
      using namespace std;
      template<typename T>void print( const T& arg ){ if constexpr( is_same_v<T, char> ) arg == '\n' ? cout << arg : cout << arg << ' '; else cout << arg << ' '; }template<typename... Args>void print( const Args&... args ){ ( print( args ), ... ); }
      template<typename... Args>void scan( Args&... args ){ ( ( cin >> args ), ... ); }
      #define int long long
      #define ll long long
      const int md = 1e9 + 7, inf = 1e18, N = 1e6;
      
      int v[ 2 ][ 15 ], pw[ 16 ];
      int sol( int j, int t, string& s, int& n ){
         if( j >= n ) return 0;
         int& res = v[ t ][ j ];
         if( res != -1 ) return res;
         res = 0;
         char r = t ? s[ j ] : '9'; int d = r - '0' + 1;
         if( r >= '4' ) --d, res += pw[ n - j - 1 ];
         if( t ) --d, res += sol( j + 1, 1, s, n );
         res += d * sol( j + 1, 0, s, n );
         return res;
         }
      
      void __(){
         int x, d = 0, n, ans = 0, f = 1, p = 0;
         scan( x );
         for( int d = 0, p = 0; f or d != p; f = 0 ){
            p = d;
            string s = to_string( x );
            n = s.size();
            memset( v, -1, sizeof( v ) );
            d = sol( 0, 1, s, n );
            x += d - p;
            }
         print( x );
         cout << "\n";
         }
      
      signed main(){
         ios_base::sync_with_stdio( false ); cin.tie( nullptr );
         int _ = 1;
         pw[ 0 ] = 1;
         for( auto i = 1; i < 16; i++ ){
            pw[ i ] = 10 * pw[ i - 1 ];
            }
         cin >> _;
         while( _-- ) __();
         return 0;
         }
      
      
»
19 месяцев назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Can someone explain editorial of G2 in detail?

»
19 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Can anyone help me figure out why this submission has a run-time error? 201201145

I have been stuck on this problem for a long time and I'm not quite sure why it has a run time error. :/

»
19 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Hey in problem C mike's solution doesn't stand out if the array b is 1 4 5 3 2 1 In other words if my array has a peak middle element is greater than it's adjacent elements 5 7 3 or 0 4 0 anything. Can anyone help me with it.

  • »
    »
    19 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    That input doesnt have an answer. The input is made from the array not the other way around.

»
18 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

how did you decide that only fib0^2 + fib1^2 + .... fib^n = fibn*fib(n+1) is the only way to split the product into n+1 numbers?

Do you have some proof regarding this?

»
12 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

For the solution to G1, how can we show that the number of paths is never a multiple of the mod? If the number of paths is a multiple of the mod, we would skip over the current length and go to the last longest length.

»
8 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

For Problem E, can we also DP on number of removed numbers? That is, number of removed numbers from 1 to 10^k, denoted as r(k), is r(k) = 10^(k-1) + 9 * r(k-1).

»
7 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Problem B: It's a shame xth row and yth column is ambiguous. You should indicate xth row (starting the count from 1).

»
7 месяцев назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Problem E can be solved using Base conversion

since our ask is basically same as in find the number in 9 base where ( 0 — 9 are allowed except 4 )

so first we can convert the number to 9 base then after that if a digit >= 4 we can modify it by adding +1,

but doing this we also need to maintain the carry overs when we will increase 9 -> 10

my AC code using this: AC CODE

»
4 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

yey brooo... it's very easy...

my codeee...

/*  यदा यदा हि धर्मस्य ग्लानिर्भवति भारत। 
                                                                                अभ्युत्थानमधर्मस्य तदात्मानं सृजाम्यहम् 
                                                                                परित्राणाय साधूनां विनाशाय च दुष्कृताम् ।
                                                                                धर्मसंस्थापनार्थाय सम्भवायुगे युगे  */


                                    #include<bits/stdc++.h> 
                                    using namespace std; 

                                    /**********************   Template Start  *************************/

                                    #define endl "\n"
                                    // #define int                                     long long
                                    #define vi                                      vector<int> 
                                    #define vb                                      vector<bool>
                                    #define vvi                                     vector<vector<int>> 
                                    #define vvb                                     vector<vector<bool>>
                                    #define pb                                      push_back
                                    #define pob                                     pop_back
                                    #define rep(x, i, y)                            for(int i = x; i < y; i++)
                                    #define all(a)                                  a.begin(), a.end()
                                    #define mapi                                     map<int,int>
                                    #define seti                                     set<int>
                                    #define umapi                                    unordered_map<int,int>
                                    #define useti                                    unordered_set<int>
                                    #define mapc                                     map<int,char>
                                    #define setc                                     set<char>
                                    #define umapc                                    unordered_map<int,char>
                                    #define usetc                                    unordered_set<char>
                                    #define pq                                      priority_queue<int> 
                                    #define pqG                                     priority_queue<int, vector<int>, greater<int>>
                                    #define ff                                      first
                                    #define ss                                      second
                                    #define all(a)                                  a.begin(), a.end()
                                    #define srt(a)                                 sort(a.begin(), a.end())
                                    #define srtrev(a)                              sort(a.rbegin(), a.rend())
                                    #define prdouble(x)                             cout << fixed << setprecision(10) << x
                                    #define c(x)                                   {cout << x << endl;} 

                                    /**************************/

                                    #define int long long int
                                    #define llu unsigned long long
                                    // #define endl '\n'

                                    /**************************/
                                    // const int aaa[100000+1];
                                    const int NN = 2*1e5;
                                    vi aaa(NN, 0);

                                    #define f(i,n) for(int i=0;i<n;i++)
                                    #define revf(i,n) for(int i=n-1;i>=0;i--)
                                    #define f1(i,n) for(int i=1;i<=n;i++)
                                    #define rf1(i,n) for(int i=n;i>=1;i--)


                                    /**************************/

                                    void revstr(string& str){ int n = str.length(); for (int i = 0; i < n / 2; i++) swap(str[i], str[n - i - 1]); }

                                    /**************************/


                                    #define con continue
                                    #define S second
                                    #define F first
                                    #define pb push_back
                                    #define pob pop_back
                                    #define el endl
                                    #define yes cout << "YES" << endl
                                    #define no cout << "NO" << endl
                                    #define mkn int n;cin >> n;
                                    #define mkx int x;cin >> x;
                                    #define mks string s;cin>>s;
                                    #define mkab int a,b;cin>>a>>b;
                                    #define mkabc int a,b,c;cin>>a>>b>>c;
                                    #define mkabcd int a,b,c,d;cin>>a>>b>>c>>d;


                                    // /-----------------------------------------/


                                    string dc(int n)
                                    {
                                        string v=to_string(n);
                                        return v;
                                    }


                                    // /-----------------------------------------/

                                    const int M = 1000000000+7;
                                    const int mod =  998244353;

                                    const int prime_N = 1e6;
                                    vb isPrime(prime_N, false);
                                    vi lp(prime_N, 0);
                                    vi hp(prime_N, 0);

                                    const int fact_N = 1e6;
                                    vi fact(fact_N);

                                    void __print(int x) { cerr << x; }
                                    void __print(double x) { cerr << x; }
                                    void __print(long double x) { cerr << x; }
                                    void __print(char x) { cerr << '\'' << x << '\''; }
                                    void __print(const char *x) { cerr << '\"' << x << '\"'; }
                                    void __print(const string &x) { cerr << '\"' << x << '\"'; }
                                    void __print(bool x) { cerr << (x ? "True" : "False"); }
                                    void __print(vector<int> a) { for (auto x : a) cerr << x << " "; cerr << endl; }
                                    void __print(set<int> s) { for (auto x : s) cerr << x << " "; cerr << endl; }
                                    void __print(map<int, int> mp) { for (auto x : mp) cerr << x.ff << " " << x.ss << endl; cerr << endl; }


                                    vi vp; 
                                    const int prime_NN = 1e6;
                                    void prime(){
                                        vector<bool>prm(prime_NN+1,true);
                                        prm[0]=prm[1]=0;
                                        for(int i=2;i*i<=prime_NN;i++){
                                            if(prm[i]==true){
                                                for(int  j= i*i;j<=prime_NN;j+=i){
                                                    prm[j] = false;
                                                } 
                                            }
                                        }

                                        for(int i =2;i<=prime_NN;i++){
                                            if(prm[i]) vp.pb(i);
                                        }
                                    }


                                    int _ceil(int a,int b){
                                    if(a%b==0){
                                        return a/b;
                                    }else{
                                        return a/b + 1;
                                    }
                                    }


                                    int cnt_bit(int n){
                                    int c=0;
                                    while(n){
                                        n&=n-1;
                                        c++;
                                    }
                                    return c;
                                    } 


                                    void pridp(vvi &dp){
                                        f(i, dp.size())
                                        {
                                            f(j, dp[0].size())
                                            {
                                                cout << dp[i][j] << " ";
                                            }
                                            cout << endl;
                                        }
                                    }

                                    void pri(vi v) { rep(0, i, v.size()) { cout << v[i] << " "; } cout << endl;}
                                    vector<int> in(int n) { vector<int> a(n); rep(0, i, n) cin >> a[i]; return a; }
                                    set<int> input_set(int n) { set<int> s; rep(0, i, n) { int x; cin >> x; s.insert(x); } return s; }
                                    multiset<int> input_multiset(int n) { multiset<int> ms; rep(0, i, n) { int x; cin >> x; ms.insert(x); } return ms; }
                                    vi prime_factors(int n) { vi prime; for(int i = 2; i*i <= n; i++) { while(n % i == 0) { prime.pb(i);  n /= i; } } if(n > 1) { prime.pb(n); } return prime; }
                                    vi divisors(int n) { vi v; for(int i = 1; i*i <= n; i++) { if(n % i == 0) { v.pb(i); if(i != n / i) { v.pb(n / i); } } } return v; }
                                    int gcd(int a, int b) { if(b == 0) { return a; } return gcd(b, a%b); }
                                    long long binMultiply(long long a, long long b, long long mod) { long long ans = 0; a = (a % mod); while(b > 0) { if(b & 1) { ans = (ans + a) % mod; } a = (a + a) % mod; b = b >> 1; } return ans; }
                                    int lcm(int a, int b) { return (a*b) / gcd(a, b); }
                                    int binExp(int a, int b, int mod) { int ans = 1; while(b > 0) { if(b & 1) { ans = (ans * 1LL * a) % mod; } a = (a * 1LL * a) % mod; b = b >> 1; } return ans; }
                                    int ncr(int n, int r) { int ans = fact[n]; int den = (fact[n - r] * 1LL * fact[r]) % M; return (ans * binExp(den, M - 2, M)) % M; }
                                    int power(int a, int b, int mod) { if(b == 0) { return 1; } int res = power(a, b/2, mod); if(b & 1) { return (a * res * res) % mod; } else { return (res * res) % mod; }}
                                    bool prime_factors_one(int n) { bool f=0; for(int i = 3; i<= n; i+=2) { if(n % i == 0){f=1;break;} }  return f; }
                                    bool divisors_check(int n) { bool f=false; for(int i = 3; i*i <= n; i+=i) { if(n % i == 0) { f=true;break;} } return f; }
                                    bool ts(int k,vi &v){ int l = 0; int r = v.size()-1; while(l<r){ int m1 = l + ((r-l)/3); int m2 = r - ((r-l)/3); if(v[m1]==k || v[m2]==k) return 1; if(v[m1]<k) l = m1+1; else if(v[m2]>k) r = m2-1; else { l = m1+1; r = m2-1;}} return 0;}

                                int hd(string s , string s2){
                                    int c=0;
                                    f(i,s.size()){
                                        if(s[i]!=s2[i]) c++;
                                    }
                                    return c;
                                }
                                void solve(){
                                    mkab
                                    mks
                                    // c(b)
                                    char t = char(b+'0');
                                    // c(v"T "<<t)
                                    bool f=0;
                                    string tmp;
                                    // tmp+=s[0];
                                    f(i,s.size()){
                                        if(s[i]<t){
                                            tmp+=t;
                                            for(int j=i;j<s.size();j++){
                                                tmp+=s[j];
                                            }
                                            f=1;
                                            break;
                                        }else tmp+=s[i];
                                    }
                                    if(f==0){
                                        c(s+t)
                                        // cout<<t;
                                    }else{
                                        c(tmp)
                                    }
                                    // cout<<endl;
                                    // c(s)


                                }














                                    int32_t main()
                                    {
                                        ios_base::sync_with_stdio(false);
                                        cin.tie(NULL);


                                        int t;
                                        cin >> t;


                                        while(t--)
                                        {
                                            solve();
                                        }

                                        return 0;
                                    }
»
4 недели назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Problem F can be easily solved by enumerating all the cycles and then checking. Submission: 284842801