首页 > 其他分享 >7.5 模拟赛小记

7.5 模拟赛小记

时间:2023-07-05 20:45:01浏览次数:57  
标签:int tot 基环树 long 7.5 无根树 小记 模拟 mod

A.方格填数 4 - 填错了

洛谷 P3197 [HNOI2008] 越狱

n 个格子,一排,能填 1 ~ m,求填数时左右相邻的格子出现相同数的方案数。

正难则反,补集转换。容易想到所有方案数减去相邻格子没有出现相同数的方案数。

那么没填错的方案数:$m \times (n - 1) ^ {m - 1}$。即第一个格子有 m 种选法,后 n - 1 个格子为了和前面的不一样所以各有 m - 1 个选法。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 100003;
int a, b;
int ksm(int x, int y)
{
    int tot = 1;
    while(y)
    {
        if(y & 1) tot = (tot * x) % mod;
        x = (x * x) % mod;
        y >>= 1;
    }
    return tot % mod;
}
signed main()
{
    scanf("%lld%lld", &a, &b);
    printf("%lld", ((ksm(a, b) % mod) - a* ksm(a - 1, b - 1) % mod + mod) % mod);
    return 0;
}
View Code

 


B.分组

洛谷 P3043 [USACO12JAN] Bovine Alliance G

前言:翻译的什么依托答辩。看着样例才猜出来题意。搁这考阅读理解呢?

题意:每个点独自领导一个小组。每条边可以分其两个端点所在的组中任意一个。要求每个组最多只能有一条边。

根据题意,就是找找连通块,用并查集。甚至不用建图。

发现只有三种情况:基环树、无根树、(不是环和链)其他(每个点均连了两个以上的边)。长这样:

对于基环树,可能的答案形态:

发现只是基环树中环的那部分,可以都选左半边的边,反之亦然。故基环树时只有两种方案;

对于无根树,可能的答案形态:

发现无根树中,总有一个点的组中没有边。于是有 n 种方案。

其他不符合要求,不贡献答案。然后把每部分的连通块求出来的答案相乘就是总方案数。

总的来说,数据结构 + 组合数学感觉是比较有意思的题目(对我来说)。反正戳着我的知识盲区了。考场只会写爆搜。

附:我图论从一开始就没学懂,基础为 0,所以补充一下基环树、无根树的定义:

基环树:严格意义上讲并不算树。大概是树和环接起来的。把环破了就是一棵正常的树。

无根树:和普通树的形态一样,只是没有指定根节点。

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const int mod = 1e9 + 7;
const int N = 1e5 + 10;
int n, m;
int u, v;
ll ans = 1;
int f[N], d[N], b[N];
int vis[N], tot = 0;
int findd(int x)
{
    if(f[x] != x) f[x] = findd(f[x]);
    return f[x];
}
void init() {for(int i = 1; i <= n; i ++ ) {d[i] = 1;f[i] = i;}}
int main()
{
    scanf("%d%d", &n, &m);
    init();
    for(int i = 1; i <= m; i ++ )
    {
        scanf("%d%d", &u, &v);
        int uu = findd(u);
        int vv = findd(v);
        if(uu == vv) b[vv]++;
        else
        {
            f[uu] = vv;
            d[vv] += d[uu];
            d[uu] = 0;
            b[vv] += b[uu] + 1;
        }
        if(! vis[u]) tot ++;
        if(! vis[v]) tot ++;
        vis[u] = vis[v] = 1;
    }
    if(tot < m)
    {
        puts("0");
        return 0;
    }
    for(int i = 1; i <= n; i ++ )
    {
        if(f[i] == i)
        {
            if(b[i] >= d[i]) ans = (ans << 1) % mod;
            else ans = ans * d[i] % mod;
        }
    }
    printf("%lld", ans);
    return 0;
}
View Code

标签:int,tot,基环树,long,7.5,无根树,小记,模拟,mod
From: https://www.cnblogs.com/Moyyer-suiy/p/17529737.html

相关文章

  • 7.5
    上午早上收拾一下出门锻炼,中午和朋友吃饭,下午在外面很晚回家,看了一会短路逻辑运算符和三元运算符。做了两道PTA的题吃完饭上床看书,再要几天书就可以看完了明天计划在家,不出门了,看一下高数,和继续学习java ......
  • 「NOIP 模拟赛 20230705」T2-序列删数问题 题解
    题面Natsuzora有一个长度为\(n\)的排列\(a_1,a_2,\ldots,a_n\),他想要将序列中的\(m\)个数删除。删除数字需要使用到“魔法工具”,其也有\(m\)种,其中第\(i\)种魔法工具能够将排列中任意一个的长度为\(l_i\)的区间中最大的数删除。每个魔法工具最多只能使用\(1\)次。......
  • 7.5打卡
    循环的选择for循环可以实现while循环的功能,while循环也可以实现for循环的功能,没有那个更好的说法,要看应用场景。for循环更合适事先知道循环总次数的场景,一般与计数器或数组结合一起使用。while循环更合适事先不知道循环总次数的场景,以达到某个目标为目,例如超女选秀,报名有多少人......
  • 7.5
    今天我们开始搬宿舍,从那个原来的宿舍,那个宿舍挺大的然后就是还没有多少人,空旷特别舒坦,还有空调制冷效果很好,然后就搬宿舍,这个宿舍在另一栋楼的四楼然后就是进来了这个宿舍非常挤,是一个小屋真的很烦,不过这里倒是有个中央空调,挺凉快的.下午就是接待新高一的需要帮忙搬行李,......
  • 每日总结(7.5)
    一、今日收获(1)学习了java俩小时;(2)阅读了半小时《大道至简》;(3)和朋友出去聚了餐;二、明日计划(1)准备7号的科目一考试;(2)继续学习java;(3)学习数据结构知识;......
  • 7.5
    今天主要学习了java的循环结构,并且学习过程中了解了一些新的内容,完成了pta上面的一些题。java的循环和c、c++一致,没有大的区别了解了:1、hasNextInt判断是不是int类型sc.hasNextInt()if(sc.hasNextInt()==true){ intn=sc.nextInt();} else{System.out.println("你输入的......
  • STM32F10x 模拟空调内外机通讯
    1)内机为主 发送3A8000DB后由SMT32转成PWM0011101000010000000006ms为高        22ms   为低          46ms   为导码    2)外机为辅 收到内机发的PWM后,返加对就应的波形,同时将收到的波形加在前面。   ......
  • 2023.7.5
    学习java中的类面向对象与面向过程面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象:强调具备了功能的对象,以类/对象为最小单位类与对象的关系类:对一类事物的描述,是抽象的、概念上的定义对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)面向对象......
  • 7.5
    今天上午去考科目一了,过程有点坎坷,进考场的时候要扫虹膜,我扫不过又骑电动车回报名的驾校去测虹膜,考完试都11点了,不过还好是过了网课把方法看完了,还看了递归的部分可变参数: ......
  • 模拟嵌入式边缘计算卡设计方案:367-XC7Z100 板卡 基于zynq XC7Z100 FMC接口通用计算平
    基于zynqXC7Z100FMC接口通用计算平台 一、板卡概述北京太速科技板卡由SoCXC7Z100-2FFG900I芯片来完成卡主控及数字信号处理,XC7Z100内部集成了两个ARMCortex-A9核和一个kintex7的FPGA,通过PL端FPGA扩展FMC、光纤、IO等接口,PS端ARM扩展网络、USB、RS232等接口......