Codeforces Round #663 (Div. 2) (A~C题,C题 Good)

比赛链接:Here

1391A. Suborrays

简单构造题,

n 放最前面,接着补 1 ~ n1 即可

1391B. Fix You

(1,1) -> (n,m) 统计相应个数的 RD 即可

char a[110][110];
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int _; for (cin >> _; _--;) {
        int n, m;
        cin >> n >> m;
        for (int i = 1; i <= n; ++i)
            for (int j = 1 ; j <= m; ++j) cin >> a[i][j];
        int sum  = 0;
        for (int i = 1; i < m; ++i) if (a[n][i] != 'R')sum += 1;
        for (int i = 1; i < n; ++i) if (a[i][m] != 'D')sum += 1;
        cout << sum << "\n";
    }
}

1391C. Cyclic Permutations (Good)

先说结论:n!2n1
对于任意的循环排列,例如 [4, 2,3,1,5,6] 它包含许多长度为3的循环: [1,2,3],[1,3,5],[3,4,5] 。请注意,所有列出的循环都包含仅从一个i选项中获得的节点。我们可以将其概括为以下几点。如果对于任何一个i,我们在它的两边做边,这将创建一个长度为3的简单循环。证明很简单。
因此,最多只能有一个峰值,即元素 n ~ 所有非循环排列都会增加,然后达到 n ,最后减少。这些形式上称为单峰置换,很容易看出,任何单峰置换都形成一棵树,因此不包含简单的循环-除了n之外,每个元素都有一个唯一定义的父元素。
我们可以通过将数字n,n相加来构造任何单峰排列−1,…,1按相同顺序排列成一个三角形。例如,[2,3,4,1]可以通过先将4,3,2推到前面,最后将1推到后面来构造。因此,对于除n之外的每个元素,我们可以选择将其推到前面或后面,使路径总数等于 2n1 .

const int mod = 1e9 + 7;
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n;
    cin >> n;
    ll a = 1, b = 1;
    for (int i = 1; i <= n; ++i) a = a * i % mod;
    for (int i = 1; i < n; ++i) b = b * 2 % mod;
    cout << (a + mod - b) % mod;
}
posted @   RioTian  阅读(61)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 全程不用写代码,我用AI程序员写了一个飞机大战
历史上的今天:
2020-07-29 POJ - 3180 The Cow Prom ( korasaju 算法模板)
2020-07-29 按需取余
点击右上角即可分享
微信分享提示

📖目录