2023 SMU RoboCom-CAIP 选拔赛
前言
更详细题解可以参考咱学长的(
A. 小斧头
f_k 表示满足条件的j = k 的(i,j)对的数量.如上图中第四行即为f1至f5的元素,f1 = 1即有(1,1)满足条件,f2 = 2即有(1,2),(2,2)满足条件,后面同理,然后要找到一个last_k,即表示k开始向前和向后a数组或b数组最大值发生改变的地方.
得出f_k = last_k + (b[k] >= a[k]) * (k - last_k)
last_k可以用单调栈求出.
#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define inf 0x3f3f3f3f
#define endl '\n'
#define int long long using namespace std; const int N = 1e5 + 10, mod = 1e9 +7; //typedef long long ll;
typedef pair<int,int> PII;
//queue<PII> q1;
map<vector<int>, int > mp;
//priority_queue <int,vector<int>,greater<int> > q2;
int n,m,t,k;
/*
*/
int ans;
void solve()
{
cin >> n;
vector<int> a(n + 1), b(n + 1), c(n + 1),f(n + 1);
for (int i = 1; i <=n ; ++i) {
cin >> a[i];
}
for (int i = 1; i <= n ; ++i) {
cin >> b[i];
}
for (int i = 1; i <= n ; ++i) {
c[i] = max(a[i], b[i]);
}
stack<int> stk1, stk2;
int lst;
for (int i = 1; i <= n ; ++i) {
while(!stk1.empty() && a[i] > c[stk1.top()])
stk1.pop();
while(!stk2.empty() && b[i] > c[stk2.top()])
stk2.pop();
if(b[i] >= a[i]){
if(stk2.empty())
lst = 0;
else
lst = stk2.top();
f[i] = f[lst] + i - lst;
}
else{
if(stk1.empty())
lst = 0;
else
lst = stk1.top();
f[i] = f[lst];
}
ans += f[i];
stk1.push(i);
stk2.push(i);
}
// for(auto i : f)
// cout << i << ' ';
// cout << endl;
cout << ans << endl;
return ;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int Ke_scholar = 1;
//cin >> Ke_scholar ;
while(Ke_scholar--)
solve();
return 0;
}
B. 能不能整除?
蒟蒻只会40分做法,学长的有一百分做法(不过咱没看懂QAQ
40分:就是去统计一下每种A[i] / A[j]出现的次数
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define inf 0x3f3f3f3f using namespace std;
const int N = 2e3 + 10; //typedef long long ll;
typedef pair<int,int> PII;
//queue<PII> q1;
map<int, int > mp;
int n,m,t,k;
int c;
priority_queue <int,vector<int>,greater<int> > C;
/*
*/
int mod,ans;
vector<int> a;
void solve()
{
cin >> n >> t >> mod;
for(int i = 0;i < n;i ++){
int x;
cin >> x;
a.push_back(x);
}
for(auto i : a){
for(auto j : a)
mp[i / j] ++;
}
for(auto [i,j] : mp){
if(mp.find(t - i) != mp.end()){
ans = (ans + j % mod * (mp.find(t - i)->second % mod)) % mod;
}
}
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
int Ke_scholar = 1;
//cin >> Ke_scholar;
while(Ke_scholar--)
solve();
return 0;
}
C. 又是一道构造题
实际上就是构造的矩阵中每一个元素是a,b数组中的公因数,构造完后再对该矩阵每行每列的乘积判断一下,不合理直接输出-1退出即可.
#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define inf 0x3f3f3f3f
#define endl '\n'
#define int long long using namespace std; const int N = 2e4 + 10, mod = 1e9 +7; //typedef long long ll;
typedef pair<int,int> PII;
//queue<PII> q1;
map<vector<int>, int > mp;
vector<int> a,b;
//priority_queue <int,vector<int>,greater<int> > q2;
int n,m,t,k;
/**/
int ans; void solve()
{
a.clear();
b.clear();
ans = 0;
cin >> n >> m;
vector<vector<int> > ma(n,vector<int>(m,0));
for(int i = 0;i < n; i++){
int x;
cin >> x;
a.push_back(x);
}
for(int i = 0;i < m;i ++){
int x;
cin >> x;
b.push_back(x);
}
auto g = a;
auto gg = b;
for(int i = 0;i < n;i ++){
for(int j = 0;j < m;j ++){
int x = __gcd(a[i],b[j]);
a[i] /= x;
b[j] /= x;
ma[i][j] = x;
}
}
for(int i = 0;i < n;i ++){
int c = 1;
for(int j = 0;j < m;j ++){
c *= ma[i][j];
}
if(c != g[i]){
cout << -1 << endl;
return ;
}
}
for(int i = 0;i < m;i ++){
int c = 1;
for(int j = 0;j < n;j ++){
c *= ma[j][i];
}
if(c != gg[i]){
cout << -1 << endl;
return ;
}
}
for(auto i : ma){
for(auto j : i){
cout << j << ' ';
}
cout << endl;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int Ke_scholar = 1;
cin >> Ke_scholar ;
while(Ke_scholar--){
solve();
cout << endl;
}
return 0;
}
2023 SMU RoboCom-CAIP 选拔赛的更多相关文章
- 2016中国大学生程序设计竞赛 - 网络选拔赛 C. Magic boy Bi Luo with his excited tree
Magic boy Bi Luo with his excited tree Problem Description Bi Luo is a magic boy, he also has a migi ...
- 2016 ccpc 网络选拔赛 F. Robots
Robots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- Codevs 2296 仪仗队 2008年省队选拔赛山东
2296 仪仗队 2008年省队选拔赛山东 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题解 题目描述 Description 作为体育委员,C君负责这次运动 ...
- Codevs 2449 骑士精神 2005年省队选拔赛四川
2449 骑士精神 2005年省队选拔赛四川 时间限制: 1 s 空间限制: 128000 KB 题目等级 : **大师 Master** 题目描述 Description 在一个5×5的棋盘上有12 ...
- JSU省赛队员选拔赛个人赛1(Coin Change、Fibbonacci Number、Max Num、单词数、无限的路、叠筐)
JSU省赛队员选拔赛个人赛1 一.题目概述: A.Coin Change(暴力求解.动态规划) B.Fibbonacci Number(递推求解) C.Max Num(排序.比较) D.单词数 ...
- 2013 CSU校队选拔赛(1) 部分题解
A: Decimal Time Limit: 1 Sec Memory Limit: 128 MB Submit: 99 Solved: 10 [ Submit][ Status][ Web ...
- 1630/2023: [Usaco2005 Nov]Ant Counting 数蚂蚁
2023: [Usaco2005 Nov]Ant Counting 数蚂蚁 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 85 Solved: 40[S ...
- 「LOJ2000~2023」各省省选题选做
「LOJ2000~2023」各省省选题选做 「SDOI2017」数字表格 莫比乌斯反演. 「SDOI2017」树点涂色 咕咕咕. 「SDOI2017」序列计数 多项式快速幂. 我们将超过 \(p\) ...
- HDU 2023 求平均成绩
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU ...
- HDU 6447 - YJJ's Salesman - [树状数组优化DP][2018CCPC网络选拔赛第10题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 Problem DescriptionYJJ is a salesman who has tra ...
随机推荐
- Spring Boot入门实验
一. 实验目的和要求 1.掌握使用 IDEA 通过 Maven 和 Spring Initializr 的方式创建 Spring Boot 应用程序: 2.掌握 Maven 的工作原理: 3.了解 s ...
- 【HDC 2024】华为云开发者联盟驱动应用创新,赋能开发者成长
本文分享自华为云社区<[HDC 2025]华为云开发者联盟驱动应用创新,赋能开发者成长>,作者:华为云社区精选. 6月21日到23日,华为开发者大会(HDC 2024)于东莞松山湖举行,这 ...
- Spring MVC 获取三个域(request请求域,session 会话域,application 应用域)对象的方式
1. Spring MVC 获取三个域(request请求域,session 会话域,application 应用域)对象的方式 @ 目录 1. Spring MVC 获取三个域(request请求域 ...
- yb课堂 前端项目技术组件概述 《三十》
常用的技术组件的作用 学前必备基础:HTML.CSS.JavaScript.Vue基础知识 Vue:用于构建用户界面的渐进式JavaScript框架 什么是Cube-UI 基于Vue.js实现的精致移 ...
- Three光源Target位置改变光照方向不变的问题及解决方法
0x00 楔子 在 Three.js 中,光源的目标(target)是一种用于指定光源方向的重要元素.在聚光灯中和定向光(DirectionalLight)中都有用到. 有时我们可能会遇到光源目标位置 ...
- 014_用vim复制粘贴_保持双手正位
[oeasy]python0014_用vim复制粘贴_保持双手正位 继续运行 回忆上次内容 程序员 还是 很可爱的 要关心 身边的程序员 啊 毕竟是新时代的 典型新职业 文明 主流职业 血型 ...
- oeasy教您玩转vim - 37 - # 删除字符
通过十进制的 ascii 值输入字符 在输入模式下 输入 ctrl + v 然后再输入 065 通过十六进制的 unicode 在输入模式下 输入 ctrl + v 然后再输入 u2642 就可以 ...
- oeasy教您玩转vim - 90 - # 语法定义syntax
内容查找 grep 回忆 我们这次研究了一下配色方案 murphy虽然配色好看 但是对于java的支持并不好 我们对于murphy进行了修改 增加了String.StorageClass颜色的定义 ...
- CF1359A 题解
洛谷链接&CF 链接 题目简述 共有 \(T\) 组数据. 对于每组数据给出 \(n,m,k\),表示 \(k\) 名玩家打牌,共 \(n\) 张牌,\(m\) 张王,保证 \(k \mid ...
- C++如何在main函数开始之前(或结束之后)执行一段逻辑?
1. 问题 2. 考察的要点 3. 解决策略 3.1. 方案一:使用GCC的拓展功能 3.2. 方案二:使用全局变量 3.3. 方案三:atexit 4. Demo测试 4.1. 测试代码 4.2. ...