首页 > 其他分享 >2024/10/09 模拟赛总结

2024/10/09 模拟赛总结

时间:2024-10-09 22:23:40浏览次数:1  
标签:10 int 09 kMaxN 2024 kP long ans using

\(100+40+20+8=168\),拿到了大众分,至少没挂分吧

#A. 矩阵交换

一个 \(m\) 维偏序,可以使用 \(m-1\) 维树状数组解决

以第 \(i\) 作为第 \(i\) 关键字,进行排序,这样一定最优。排完之后直接判断是否满足条件即可

// BLuemoon_
#include <bits/stdc++.h>

using namespace std;

const int kMaxN = 100 + 5;

struct P {
  int e[kMaxN];
};

int t, n, m;
bool flag = 1;
P a[kMaxN];

void pr(bool pr) {
  cout << (pr ? "YES" : "NO") << '\n';
}

int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  freopen("exchange.in", "r", stdin), freopen("exchange.out", "w", stdout);
  for (cin >> t; t; t--, flag = 1) {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        cin >> a[i].e[j];
      }
    }
    sort(a + 1, a + n + 1, [](P l, P r) {
      for (int i = 1; i <= m; i++) {
        if (l.e[i] != r.e[i]) {
          return l.e[i] < r.e[i];
        }
      }
      return 0 == 1;
    });
    for (int j = 1; j <= m; j++) {
      for (int i = 2; i <= n; i++) {
        if (a[i].e[j] < a[i - 1].e[j]) {
          flag = 0;
          break;
        }
      }
      if (!flag) {
        break;
      }
    }
    pr(flag);
  }
  return 0;
}

#B. 砖块摆放/原题

定义 A 为 \(0\),B 为 \(1\),C 为 \(2\)

所以可以把每一个值 \(d\) 被其下面两个数 \(d_1,d_2\) 表示:

\[d=-(d_1+d_2)\bmod 3 \]

那么最顶层就可以表示成这样:

可以发现这很像杨辉三角,但是模数只有 \(3\),没有逆元。只能用 Lucas 解决

// BLuemoon_
#include <bits/stdc++.h>

using namespace std;
using LL = long long;

const int kMaxN = 2e5 + 5;

int t, n, a[kMaxN], ans;
char ch;

int C(int p, int k, int ret = 1) {
  if (p < k) {
    return 0;
  }
  for (int i = p - k + 1; i <= p; ret *= i, i++);
  for (int i = 1; i <= k; ret /= i, i++);
  return ret % 3;
}
int Lucas(int p, int k) {
  if (p < k) {
    return 0;
  }
  if (p <= 10) {
    return C(p, k);
  }
  return Lucas(p / 3, k / 3) * C(p % 3, k % 3) % 3;
}

int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  freopen("brick.in", "r", stdin), freopen("brick.out", "w", stdout);
  for (cin >> t; t; t--, ans = 0) {
    cin >> n;
    for (int i = 1; i <= n; i++) {
      cin >> ch, a[i] = ch - 'A';
    }
    for (int i = 1; i <= n; i++) {
      (ans += Lucas(n - 1, i - 1) * a[i] % 3) %= 3;
    }
    (n & 1 ^ 1) && (ans = (3 - ans) % 3);
    cout << (char)(ans + 'A') << '\n';
  }
  return 0;
}

#C. 学习 LIS

考虑状压 dp,令 \(dp_{i,j,s}\) 为:正在考虑 \(i\) 填哪里,正在考虑从后向前数第 \(j\) 位是否填 \(i\),填入的集合是 \(s\) 的方案数

转移直接分是否选 \(i\) 分类讨论即可,具体可以看代码

// BLuemoon_
#include <bits/stdc++.h>

using namespace std;
using LL = long long;

const int kMaxN = 20, kL = 1 << kMaxN, kMaxM = 3e3 + 5;
const LL kP = 998244353;

int n, m, a[kMaxN + 1], mx[kL], ans[kMaxN + 1], dp[2][kMaxN + 1][kL], cur, nxt = 1, cnt;
LL c[kMaxM][kMaxM];

int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0), c[0][0] = c[1][0] = c[1][1] = 1;
  freopen("lis.in", "r", stdin), freopen("lis.out", "w", stdout);
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  for (int i = 2; i < kMaxM; i++) {
    c[i][0] = 1;
    for (int j = 1; j <= i; j++) {
      c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % kP;
    }
  }
  for (int j = 0; j < (1 << n); j++) {
    for (int i = 0; i < n; i++) {
      if (j & (1 << i)) {
        mx[j] = max(mx[j], a[i]);
      }
    }
  }
  dp[0][n - 1][0] = 1;
  for (int u = 1; u <= n; u++) {
    for (int i = n - 1; ~i; i--) {
      for (int j = 0; j < (1 << n); j++)
        if (dp[cur][i][j]) {
          int tmp = dp[cur][i][j];
          (dp[i ? cur : nxt][(i ? i : n) - 1][j] += tmp) %= kP;
          if (!(j & (1 << i)) && mx[j & ((1 << i) - 1)] + 1 == a[i]) {
            (dp[i ? cur : nxt][(i ? i : n) - 1][j | (1 << i)] += tmp) %= kP;
          }
          dp[cur][i][j] = 0;
        }
    }
    ans[u] = dp[nxt][n - 1][(1 << n) - 1], swap(cur, nxt);
  }
  for (int i = 1; i <= n; i++) {
    for (int j = i - 1; j >= 1; j--) {
      ans[i] = (ans[i] + (-1 * c[i][j] * ans[j] % kP) + kP) % kP;
    }
    cnt = (cnt + ans[i] * c[m][i] % kP) % kP;
  }
  cout << cnt << '\n';
  return 0;
}

#D. 战略轰炸

人机线段树二分,先咕咕咕

标签:10,int,09,kMaxN,2024,kP,long,ans,using
From: https://www.cnblogs.com/bluemoon-blog/p/18455234

相关文章

  • 10.9日
    .定义与语法JavaScript:函数可以使用关键字function定义,也可以使用箭头函数(ES6+):javascriptfunctionmyFunction(a,b){returna+b;}constmyArrowFunction=(a,b)=>a+b;Java:函数是类中定义的方法,必须指定返回类型,并且所有的方法都属于某个类:javapublicclas......
  • ChatGPT国内中文版镜像网站整理合集(2024-10月最新)
    一、GPT中文镜像站① yixiaai.com 支持GPT4、4o、o1、文件上传、知识库,支持MJ绘画② chat.lify.vip 支持通用全模型,支持文件读取、插件、绘画、AIPPT③ AIChat 支持GPT3.5/4,4o以及MJ绘画1.什么是镜像站镜像站(MirrorSite)是指通过复制原始网站内容和结构,创建的备用......
  • 代码随想录算法训练营day10| 232.用栈实现队列 225. 用队列实现栈 20. 有效的括
    学习资料:https://programmercarl.com/栈与队列理论基础.html栈与队列学习记录:232.用栈实现队列(两个栈(stack_in,stack_out)实现一个队列的行为)点击查看代码classMyQueue(object):def__init__(self):self.stack_in=[]self.stack_out=[]d......
  • 20222426 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    学号202224262024-2025-1《网络与系统攻防技术》实验一实验报告1.实验内容1.1NOP,JNE,JE,JMP,CMP汇编指令的机器码:1.1.1NOP(NoOperation)功能:NOP指令是一条空操作指令,它不做任何事情。执行NOP指令时,处理器的状态(如寄存器值、内存内容等)不会发生变化,只是简单地消耗了一......
  • 20222401 2024-2025-1 《网络与系统攻防技术》实验一实验报告
    1.实验内容本次实验是关于缓冲区溢出攻击的,主要的学习内容如下:1.基本Linux命令objdump:将代码段反汇编,在这次实验中主要是用来找地址的。xxd:实现十六进制与二进制的转换,在这次实验的过程中,主要是有两个地方用到了这个命令。一是在打开文件后进行转换,而是以十六进制打开文件,保证......
  • 【笔记】杂题选讲 2024.10.5(DNF)
    十一杂题选讲-VirtualJudge(vjudge.net)/mnt/e/codes/contests/20241008/sol.md目录[AGC004F]Namori[1406E]DeletingNumbers[1081G]MergesortStrikesBack[1033E]HiddenBipartiteGraph[1254E]SendTreetoCharlie[1012E]Cyclesort[1284F]NewYearandSocialN......
  • 2024.10.9 LGJ Round
    B对于所有\(x\in[0,n],y\in[0,m]\),求执行\(x\getsx+y,y\getsx+y\)若干次后满足\(x=k\)的双元组个数。这个题充分体现我的唐氏。具体地枚举\(x,y\)分别被算了多少次,系数是斐波那契数列,所以项数很少。然后转化为求\(k_1x+k_2y=k\)的方案数,这个我非常唐不会求。只需......
  • 1009鲜花——当每颗星星
    突然发现自己已经好久没有来写博客了这是不好的正如某位\(AClove\)所说,我不能再这样摆烂下去了!经历了CSP-S2024第一轮的失利,我好像并没有完全的吸收教训还会在410玩吗?我不知道,我希冀不会的——————分割线————————“当一颗星搁浅人间再不能回曾经的天际线”......
  • 2024自动化保研经验分享(西工成电北邮北航西交复旦计算所自所等等)
            具体的保研黑话、保研流程及注意事项就不说了哈,知乎上有很多大佬的分享非常细致,我就说说我参加的几个夏令营和预推免的具体情况及注意事项一、个人基本情况先上个人基本情况院校:某顶2专业:自动化rk:7%-10%(菜狗,很多院筛都过不了英语:刚过(悲伤竞赛:数模水赛省......
  • 2024/9/30 日 日志
    今天下午进行了国庆假期前的小测。我们需要界面化生成30道四则运算题。在此次测试中,我原打算模仿迷宫游戏的格式将题目尽数输出。但在简化过程多层循环时遇到了问题ij的位置当然可变,但无法保证时在一行中输出不同的题目。加之频繁调整位置让过程变得复杂。以下是滑轮完成。C......