Educational Codeforces Round 140 (Rated for Div. 2)
侧边栏壁纸
  • 累计撰写 87 篇文章
  • 累计收到 1 条评论

Educational Codeforces Round 140 (Rated for Div. 2)

xiaohe
2024-08-26 / 0 评论 / 1 阅读 / 正在检测是否收录...

A.Cut the Triangle

算法本质

模拟

题目大意

给定一个面积不为0的三角形,需要你判断是否可以通过竖切or横切分成2个面积不为0的三角形。

思路推演

只要保证不是水平+竖直方向的直角就好了。

B.Block Towers

算法本质

思维

题目大意

n个“塔”,每个塔由a[]的积木堆成,只有积木严格多余的塔之间可以传递积木(每次传递一块)。

请问第一个塔最多可以有多少个积木。

思路推演

优先用较少的积木,贪心处理。

title

算法本质

题目大意

思路推演

$i + 1\sim j $

ac核心代码

头文件、宏定义、快读模板、常见变量、常见变量等略。

D.Playoff

算法本质

思维

题目大意

有2^n个人,其id各不相同,并且集合是一个排列。

现在任意调整他们的位置,其每天会两两战斗,淘汰一半的人,总共战斗n天决出胜者。

现在给出一个字符串S,其s[i]=1表示第i天,id值更大的人会获胜,反之亦然。

请输出:可以通过调整位置最后胜出的id。

思路推演

假设当前人id为x

  • 如果当前轮id大的胜
    就需要制造一个和x一模一样境遇的点,然后放在x下面,假设为y
    小于y的值一定小于x,大于y的值无法判断。
    所以小于x的值的个数*2+1了
  • 如果当前轮id小的胜
    同理,大于y的值的个数*2+1了

ac核心代码

头文件、宏定义、快读模板、常见变量、常见变量等略。
inline void solve()
{
    //init
    cin>>n>>s;
    s = " " + s;
    //cal
    int da=0, xiao=0;
    for (int i=1; i<=n; i++)
    {
        if (s[i]=='1')
            xiao = xiao*2+1;
        else if (s[i]=='0')
            da = da*2+1;
    }
    //out
    for (int i=xiao+1; i<=qpow(2,n)-da; i++)
        cout<<i<<" ";
    cout<<endl;
    return;
}
0

评论 (0)

取消