当前位置: 首页 > news >正文

ABC425题解

A. Sigma Cubes

code
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){cin >> n;int ans = 0;for(int i = 1; i <= n; ++i){ans += ((i&1)?-1:1) * (i * i * i); }cout << ans;
} 

B. Find Permutation 2

code
#include<bits/stdc++.h>
using namespace std;
const int NN = 1e4 + 8;
int n;
int a[NN],b[NN];
int main(){cin >> n;for(int i = 1; i <= n; ++i) cin >> a[i];for(int i = 1; i <= n; ++i)if(a[i] != -1){if(b[a[i]] == 0) b[a[i]] = 1;else{cout << "No";return 0;}}for(int i = 1,j = 1; i <= n; ++i){if(a[i] == -1){while(b[j]) ++j;a[i] = j;++j;}}cout << "Yes\n";for(int i = 1; i <= n; ++i) cout << a[i] << " ";
}

C. Rotate and Sum Query

记录偏移量 + 分讨

code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int NN = 2e5 + 8;
int n,Q;
ll a[NN];
ll pre[NN];
int jum; 
int main(){cin >> n >> Q;for(int i = 1; i <= n; ++i){cin >> a[i];pre[i] = pre[i-1] + a[i];}while(Q--){int op;cin >> op;if(op == 1){int c;cin >> c; jum += c;jum %= n;}else{int l,r;cin >> l >> r;l += jum; r += jum;if(l <= n && r <= n) cout << pre[r] - pre[l-1] << "\n";else if(l <= n && r > n){r -= n;cout << pre[r] + pre[n] - pre[l-1] << "\n";}else if(l > n && r > n){l -= n; r -= n;cout << pre[r] - pre[l-1] << "\n"; }}}
} 

D. Ulam-Warburton Automaton

跑一遍 bfs(不能每次扩展扫一遍全图,而是每次扩展找出新的可能被扩展的点)

code
#include<bits/stdc++.h>
using namespace std;
const int NN = 3e5 + 8;
int cnt,precnt;
int H,W;
int x_[4] = {0,0,1,-1};
int y_[4] = {1,-1,0,0};
vector<int> M[NN];
string s;
struct Node{int x,y;
};
queue<Node> Q,Q2,Q3;
void color(int x,int y){M[x][y] = 1;for(int i = 0; i < 4; ++i){int tx = x + x_[i], ty = y + y_[i];if(M[tx][ty] == 0 && tx != 0 && ty != 0 && tx <= H && ty <= W) Q2.push({tx,ty});}
}
bool Calc(int x,int y){int sum = 0;for(int i = 0; i < 4; ++i) sum += M[x+x_[i]][y+y_[i]]; return sum == 1;
}
int main(){ios::sync_with_stdio(false),cin.tie(0);cin >> H >> W;M[0].resize(W+2);M[H+1].resize(W+2);for(int i = 1; i <= H; ++i){M[i].resize(W+2);cin >> s;for(int j = 0; j < W; ++j){if(s[j] == '#'){M[i][j+1] = 1;}else{M[i][j+1] = 0;}}}for(int i = 1; i <= H; ++i){for(int j = 1; j <= W; ++j){if(M[i][j] == 1){++cnt;color(i,j);}}}swap(Q,Q2);while(cnt != precnt){precnt = cnt;while(!Q.empty()){int x = Q.front().x,y = Q.front().y;Q.pop();if(Calc(x,y)){Q3.push({x,y});}}while(!Q3.empty()){int tx = Q3.front().x,ty = Q3.front().y;Q3.pop();color(tx,ty); ++cnt;}swap(Q,Q2);}cout << cnt;
}

E. Count Sequences 2

可以知道答案可以两种方法求解,计 \(sum = \sum a_i\)

我们的答案即为 \(\frac{sum!}{\prod (a_i!)}\),又因为模数不是质数,所以我们可以因式分解 \(i!\) 并且预处理

我们的答案还可以写成 \(\prod_{i=1}^n \binom {sum - \sum_{j=1}^{i-1}a_j}{a_i}\),对于这个式子,我们可以通过加法的递推公式预处理组合数。

code
#include<bits/stdc++.h>
using namespace std;
const int NN = 5e3 + 8,MM = 700;
typedef long long ll;
int T,M;
int n;
int a[NN],sum;
int prime[NN],cnt;
bool inp[NN];int ans[MM];
int jcnum[NN][MM];
ll ksm(ll x,ll k){ll ans = 1;while(k){if(k&1) ans = ans * x % M;x = x * x % M;k >>= 1;}return ans;
}
void get(int x){int rx = x;for(int i = 1; i <= cnt; ++i){jcnum[rx][i] = jcnum[rx-1][i];while(x % prime[i] == 0){++jcnum[rx][i]; x /= prime[i];}}
}
void init(){for(int i = 2; i <= 5e3; ++i){if(!inp[i]){prime[++cnt] = i;for(int j = 2; j * i <= 5e3; ++j) inp[i*j] = 1;}}for(int i = 2; i <= 5e3; ++i) get(i);
}
void solve(){cin >> n;sum = 0;for(int i = 1; i <= n; ++i){cin >> a[i];sum += a[i];for(int j = 1; j <= cnt; ++j){ans[j] -= jcnum[a[i]][j];}}for(int i = 1; i <= cnt; ++i) ans[i] += jcnum[sum][i];ll res = 1;for(int i = 1; i <= cnt; ++i){res = res * ksm(prime[i],ans[i]) % M;ans[i] = 0;}cout << res << '\n';
}
int main(){ios::sync_with_stdio(false),cin.tie(0);init();
//	int st = clock();
//	for(int i = 1; i <= 5000; ++i) get(i);
//	int ed = clock();
//	cout << (double)((ed-st) * 1.0 / CLOCKS_PER_SEC) << endl;cin >> T >> M;while(T--){solve();}
}

F. Inserting Process

tag: 状压DP

\(N \leq 22\) 显然是一个状压 DP 的数据范围

然后就是我们可以发现我们只需要处理原串是类似于 \(aa\) 串再插入一个 \(a\),插在最前面,中间和末尾等价的情况。

这种情况,我们只把插入到最前面纳入贡献,状压的时候,就看我们插入的这个位置的前一位是不是和当前插入的这个字符相同即可

code
#include<bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
const int NN = (1 << 22) + 8;
int n;
string s;
int f[NN];
int main(){ios::sync_with_stdio(false),cin.tie(0);cin >> n;cin >> s;s = ' ' + s + ' ';f[0] = 1;for(int i = 1; i < (1<<n); ++i){int pre = 0,next = 0;for(int j = 0; j <= n; j = next){int k;for(k = j+1; k <= n; ++k){if(i >> (k-1) & 1){break;}}next = k;if(j == 0) continue;if(s[pre] != s[j]) f[i] += f[i ^ (1 << (j-1))];if(f[i] >= MOD) f[i] -= MOD;pre = j;}}cout << f[(1 << n) - 1] << '\n';
}

G. Sum of Min of XOR

http://www.gsyq.cn/news/13466.html

相关文章:

  • STM32中的Flash、ROM与RAM全解析 - 指南
  • 9.22 总结
  • 网络工程 --- 一个嵌入式网络设备中存在哪些开源软件
  • 挖同行墙脚!有稳定供应商的客户怎么下手构建?
  • LeetCode 386 字典序排数 Swift 题解:模拟字典翻页的遍历技巧 - 实践
  • 通过velocity将增量发版的代码及文件生成生成一个linux shell文件(解放运维)
  • 题解:AT_abc214_g [ABC214G] Three Permutations
  • 从企业级项目到普惠API:我如何将自研的人脸识别引擎打造成「识度AI」
  • 帮助向量机深度解析:从数学原理到工程实践的完整指南
  • 【Array】类型化数组:强类型集合的优势
  • 【安装红帽子 redhat Linux 9.0版本】教程
  • CentOS 10服务器版 部署Zabbix7.2 server端 - 教程
  • 完整教程:雪山飞狐之 Swift 6.2 并发秘典:@concurrent 的江湖往事
  • 数字孪生背后的通信协议:MQTT、OPC UA选型指南 - 指南
  • 深入解析:DIC技术在极端条件下的应用及解决方案
  • Nginx反向代理配置全流程实战:从环境搭建到HTTPS部署 - 详解
  • crewCTF 2025 -- WASM Vault
  • oppo-r9m线刷刷机教程
  • 【DateTime】日期时间:时间处理的基础
  • 完整教程:蒸汽机革命后工业生产方式的变革与AI智能名片S2B2C商城小程序的影响
  • 2025 PHP7/8 实战入门:15 天精通现代 Web 制作——第 15 课:项目实战与部署
  • 一个问题记录-服务器那边所以得请求进去,去操作数据库的时候,全部都拿不到数据库链接com.alibaba.druid.pool.GetConnectionTimeoutException
  • 稍微人格解离一点也无所谓,别太过就行
  • OI 模板合集
  • 非线性规划、最优控制与多目标优化
  • IDEA/WebStorm 卡顿困难与启动参数调优指南
  • python第三天
  • 全国主要城市温度舒适度榜:谁在天堂,谁在蒸笼
  • 【IEEE出版、曾获中国科协认证】第六届机械工程、智能制造与自动化技术国际学术会议 (MEMAT 2025)
  • 【2025-09-26】奋斗逻辑