11.22 CW 模拟赛 赛时记录
看题#
也是把昨天的题调完 + 开大, 开局自带
还是老
机房有人能把薄膜键盘敲出机械的声音
感觉每场都只打了弱智分, 怎么办?
#
我咧个逆序对啊
一眼找规律 + 思维, 应该能做
#
像是图论一类的东西, 观察一下看能不能做
不是哥们, 不给部分分?
#
我不到啊
#
我不到啊
话说每次都看完题正序做, 好像也没什么意义
#
容易的, 我们可以知道数列
注意到
那么问题就简单了
考虑计算每个数在
那么对于第
具体的, 枚举每一个复制串, 每一个复制串对答案的贡献为
#
也是传统不写代码, 开就完了
显然的, 我们可以先转化问题
对于无向图上的
手玩样例看下有没有思路?
显然的, 对于
想到
考虑剩下的 显然可以状态压缩 , 由于是完全图, 状态膨胀非常快, 大概是
其实对于后面的点, 我有一个乱搞做法, 枚举起始点, 每个点贪心的选择最近点即可, 但是正确性比较的不显然, 冬天到了也是没有什么打的欲望
考虑剪掉不需要的枝, 然而剪不掉w
顺着状压
注意到每一条边
考虑逆向处理
我们可以知道, 对于每一个点
但是这里有约束条件, 注意到如果
所以我们要找出
然后就可以用最小生成树处理了
#
也是大劣势, 出场多半发现其他人都有
神秘题目, 也是不太理解, 像
考虑
有点困, 今天又要反向
稍微想拿多一点的分就需要想正解, 丢了
#
高档暴力
对于
对于
对于
最后一段可以是
- 两个
- 一个
代码#
也是留下接近
#
#include <bits/stdc++.h>
#define int long long
const int MAXN = 5200;
int n, k;
int a[MAXN];
class Sol_Class
{
private:
int p = 0;
int App[MAXN];
int SumB = 0;
int Ans = 0;
public:
/*计算数列 a 逆序对个数, 以及 B 的和*/
void CalcP()
{
memset(App, 0, sizeof(App));
for (int i = 1; i <= n; i++) {
for (int j = 1; j < i; j++) {
if (a[j] > a[i]) p++;
}
App[a[i]]++;
}
// std::sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++) {
for (int j = a[i] + 1; j <= 5000; j++)
SumB += App[j];
}
}
/*计算答案*/
void solve()
{
for (int i = 1; i <= k; i++) {
Ans += (i - 1) * SumB + p;
}
printf("%lld", Ans);
}
} Sol;
signed main()
{
#ifdef FILE_IO
freopen("inversion.in", "r", stdin);
freopen("inversion.out", "w", stdout);
#endif
scanf("%lld %lld", &n, &k);
for (int i = 1; i <= n; i++) {
scanf("%lld", &a[i]);
}
Sol.CalcP();
Sol.solve();
return 0;
}
虽然很神经, 但是打完了, 用时
#
建边跑
发现状压往里走应该就是正解, 那就把这个题放到最后去
#
写个
喵了个咪的打不出来, 丢了
#
#include <bits/stdc++.h>
const int MAXN = 70;
int n, x, y, z;
int s[MAXN];
bool check()
{
int Sum[MAXN];
memset(Sum, 0, sizeof(Sum));
for (int i = 1; i <= n; i++) Sum[i] = Sum[i - 1] + s[i];
int Cut1 = 0;
while(Sum[Cut1] < x) Cut1++;
if (Sum[Cut1] != x) return false;
int Cut2 = Cut1;
while(Sum[Cut2] - Sum[Cut1] < y) Cut2++;
if (Sum[Cut2] - Sum[Cut1] != y) return false;
if (Sum[n] - Sum[Cut2] != z) return false;
return true;
}
int Ans = 0;
void dfs(int Now)
{
if (Now == n) {
if (check())
Ans++;
return;
}
for (int i = 1; i <= 10; i++) {
s[Now + 1] = i;
dfs(Now + 1);
s[Now + 1] = 0;
}
}
int main()
{
#ifdef FILE_IO
freopen("subsequence.in", "r", stdin);
freopen("subsequence.out", "w", stdout);
#endif
scanf("%d %d %d %d", &n, &x, &y, &z);
if (n <= 6)
{
dfs(0);
printf("%d", Ans);
} else{
if(z == 1)
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n && i + j < n; j++) {
int k = n - i - j;
Ans += i * j * k;
}
}
else
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n && i + j < n; j++) {
int k = n - i - j;
if (k == 1) Ans += i * j * k;
else Ans += i * j * (k * (k - 1) / 2) + i * j * k;
}
}
printf("%d", Ans);
}
return 0;
}
欧呦, 谢天谢地了,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】