首页 > 其他分享 >CF1929 Codeforces Round 926 (Div. 2)

CF1929 Codeforces Round 926 (Div. 2)

时间:2024-02-18 13:35:03浏览次数:64  
标签:CF1929 __ 亏本 硬币 下注 Codeforces int128 Div now

C. Sasha and the Casino

当 \(k<x\) 时,显然我们只需要每次下注一个硬币就好了.

当 \(k>x\) 时.

考虑先一个一个的下硬币,那么为了保证不亏本,最多输 \(k-2\) 局,然后在第 \(k-1\) 局赢,这样才能盈利 \(1\) 个硬币.

那么在第 \(k\) 局之后呢? 此时我们最少也需要下注两个硬币,这样赢了就能获得 \(2k\) 个硬币, (错误结论:直到第 2*k局之前我们都是可以有机会把之前亏的都赢回来的.)

思考一下,假设硬币数量充足,这时候两个两个的投最多进行几局才能保证不亏本?

为什么会亏本?

你投的数量越多,就可能导致即使你在之后的某一局中赢得 \(2k\) 个硬币也不能弥补之前的亏损,这样你就亏本了,庄家就可以靠这种策略坑你的钱.因此你要保证你的下注赢了以后要稳稳当当地盈利.

假设当前进行的是第 \(i\) 局,下注为 \(now\) ,那么如果赢了,就获得 \(k*now\) 个硬币.假设我们之前投了 \(all\) 个硬币,那么只有满足 \(k*now \geq all+k\),才能保证不亏本. 化简得 \(now\geq all/(k-1)\),此处是上取整.这样我们就得到了为了防止亏本,每次下注的最低金额

这样就很简单了,算出来 1~x 局,以及最后稳赢1局总共x+1局的最低下注金额的和就可以了.

WA7是因为没开longlong或者 当花费钱数大于a时没有break,如果不break就要用__int128存.

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int __int128

void solve()
{
    long long k,x,a;
    cin>>k>>x>>a;
    __int128 l = 0;
    for(int i=1;i<=x+1;i++)
    {
        __int128  now=0;
        if(l%(k-1)==0)
        {
            now = l/(k-1)+1;
        }
        else 
        {
            now = (l+k-2)/(k-1);
        }
        l+=now;
        // now*k>l+now
        // now*(k-1)>l
        // now>l/(k-1)
        // if((l+1+k-1)%k==0)
        // {
        //     l+=(l+1+k-1)/k+1;
        // }
        // else l+=(l+1+k-1)/k;
        // cout<<' '<<l<<'\n';
        // all+=(all+1+k-1)/k;
    }
    if(l<=a)
    {
        cout<<"YES\n";
    }
    else cout<<"NO\n";
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    long long T;
    cin>>T;
    while(T--)
        solve();
}

标签:CF1929,__,亏本,硬币,下注,Codeforces,int128,Div,now
From: https://www.cnblogs.com/oijueshi/p/18019122

相关文章

  • 【赛后反思】【LGR-175 Div.4】 洛谷入门赛#20 赛后反思
    洛谷入门赛#20赛后反思今日推歌:《水与水之歌feat.绮萱》きくお呆在这里直到精神恍惚为止让我们一起快乐地玩耍我们术术人有自己的《让我们荡起双桨》(大雾Before先看结果(是同步赛的成绩,因为前一天晚上我在死磕dfs):省流:暴力-纯度75%STL-纯度25%展开目录目录洛谷入......
  • Codeforces Round 922 (Div. 2)
    A.BrickWall因为水平砖块的长度至少为\(2\),所以一行中水平砖块最多放\(\lfloor\frac{m}{2}\rfloor\)块,因此答案不超过\(n\cdot\lfloor\frac{m}{2}\rfloor\)。如果\(m\)是奇数,用长度为\(\lfloor\frac{m}{2}\rfloor\)的水平砖块平铺过去,最后一块长度为\(3\),这样......
  • Codeforces 解题报告(202402)
    CodeforcesRound926D-SashaandaWalkintheCitydp,主要难点在于设状态。发现子树内一旦存在一个点,到当前子树的根节点路径上有两个危险点,那么除了那条链所属的子树,其他的点就都不能选了。所以把这个性质放进状态,设\(f_{u,0/1}\)表示以\(u\)为根的子树内,是否存在一......
  • CF1929E 题解
    题意:给定一棵\(n\)个节点数和\(k\)条路径\((a_i,b_i)\),求至少将多少条边染色,使得给定路径都至少有一条染色的边。\(n\le10^5,k\le20\)。思路:好题。显然状压\(dp\),\(dp[S]\)表示至少染多少条边使得\(S\)中的路径都满足条件。正常思路是枚举子集转移,考虑\(T\s......
  • Codeforces(1500板刷)
    目录写在前面1.A.DidWeGetEverythingCovered?(构造、思维)题目链接题意题解代码总结2F.Greetings(离散化+树状数组)题目链接题意题解代码总结写在前面开始板刷1500了,主要是最近卡1300-1400上不去,发现cf很多思维题要不是想不到,要不就是签的慢,被读题卡了心态就巨难受,一下就......
  • Codeforces Round 926 (Div. 2) 总结
    A题意:给出一个数组,让你重新排序,\(\sum_{i=1}^{n-1}a_i-a_{i+1}\)最大。做法:显然从小到大排序即可,答案就是最大值减去最小值。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e6+5,MOD=998244353;signedmain(){ios::sync_with_s......
  • CF1929
    比赛链接A简单题,一眼秒答案为最大值减最小值。记录B简单题,观察到先染第一列第一到第$n-1$行,再染最后一列第一到第$n-1$行,能保证每次都有两个新的对角线被覆盖,如果$k\leq2\timesn-2$,输出$k/2$上取整,否则输出$2*n-2+k-(4*n-4)$。记录C不难发现,每次......
  • Codeforces Round 926 (Div. 2) DEF
    D.SashaandaWalkintheCity题意:给定一棵树,问不存在三个点属于同一条路径的点集个数。\(f[x]\)表示,最近公共祖先为\(x\)的合法非空集数量。如果选\(x\),那么只能为不选子树或选一棵子树,否则\(u\insubtree[y_1]\),\(v\insubtree[y_2]\)与\(x\)共链。?贡献为\(......
  • CF1929
    CF1929总结Url:https://codeforces.com/contest/1929Rating:https://codeforces.com/bestRatingChanges/12561378C误解了题意,以为赌场会配合他前面x次都输然后赢最后一场。原来赌场不会配合Sasha。他要分配最好策略,不论赌场怎么搞都能赚钱。然后注意取整,本来想hack一个人,没h......
  • Codeforces Round 926 (Div. 2) 赛后总结
    这场比赛掉了前三场比赛上的分,望周知。SashaandtheBeautifulArray题目大意:一个有n个数的数组,对n个数进行排序,求数组中ai-ai-1(下标从2到n)的和的最大值。分析列出来和式,为an-an-1+an-1-an-2……-a1最后得到an-a1那么an最大,a1最小即可。很容易想到排序。#include<i......