SMU Spring 2023 Trial Contest Round 10
A. Remove Duplicates
题意大概就是从左到右数字最先数完的最先输出
所以我们可以在输入每个数时记录每个数的出现次数,然后在循环一遍,每次该数字的次数减1,当数字的次数只剩1的时候就输出这个数字.
#include <bits/stdc++.h>
//#define inf 0x3f3f3f3f
#define endl '\n'
#define int long long using namespace std; const int N = 2e3 + 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;
/*
*/
vector<int> a, b;
void solve()
{
cin >> n;
set<int> S;
vector<int> a,b;
int vis[N] = {0};
for(int i = 0;i < n; i++){
int x;
cin >> x;
vis[x] ++;
a.push_back(x);
}
for(int i = 0;i < a.size(); i++){
if(vis[a[i]] == 1){
b.push_back(a[i]);
}
else
vis[a[i]]--;
}
cout << b.size() << endl;
for(auto i : b){
cout << i << ' ' ;
}
}
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. File Name
题意大概就是说不能出现三个及以上的x
所以我们每找到一个x,就取找它后面有多少个x,如果大于2,ans就加上x的个数 - 2,因为题目要求是可以允许两个及以下x存在的
#include <bits/stdc++.h>
//#define inf 0x3f3f3f3f
#define endl '\n'
#define int long long using namespace std; const int N = 2e3 + 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;
/*
*/
vector<int> a, b;
void solve()
{
cin >> n;
string s;
cin >> s;
int ans = 0;
for(int i = 0; i < s.size(); i++){
if(s[i]!='x')
continue;
m = i;
while(s[i] == 'x' && i < s.size()){
i++;
}
if(i - m > 2)
ans += (i - m - 2);
}
cout << ans << 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();
return 0;
}
C. Letters
题意大概就是给你n层楼,m封信件,再给你每层楼有多少房间和m件信封需要送到多少号房间
因为信封给的是房间号,所以我们可以先用前缀和将前面的房间存起来,对于每封信件我们可以二分找到房间数,然后减去它上层楼的房间数就是当前楼的第几间房了.
当然由于他给的信封房间号是保证递增的,也可以每次判断上一封信件放在几楼,再跟进当下的房间数在其基础上进行加多少房间或者不加(就在当前楼).
#include <bits/stdc++.h>
//#define inf 0x3f3f3f3f
#define endl '\n'
#define int long long using namespace std; const int N = 2e3 + 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;
/*
*/
vector<int> a, b;
void solve()
{
cin >> n >> m;
vector<int> a,b;
cin >> k;
a.push_back(k);
for(int i = 1;i < n; i++){
int x;
cin >> x;
a.push_back(x + a[i - 1]);
}
for(int i = 0 ;i < m; i++){
int x;
cin >> x;
auto it = lower_bound(a.begin(),a.end(),x) - a.begin();
if(lower_bound(a.begin(),a.end(),x) == a.begin())
cout << 1 << ' ' << x << endl;
else
cout << it + 1 << ' ' << x - a[it - 1] << 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();
return 0;
}
D.Almost Arithmetic Progression
题意大概就是对每个数+1,-1,或者不变,问是否可以组成一个等差数列
对于小于2个数的特殊处理一下,其余由于前面两个数三种变化各有9种组合方式,所以我们可以直接暴力求解
#include <bits/stdc++.h>
#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;
/*
*/
void solve()
{
cin >> n;
vector<int> a(n);
for(int i = 0;i < n; i++){
cin >> a[i];
}
if(n <= 2){
cout << 0 << endl;
return ;
}
int ans = inf;
for(int i = -1;i <= 1;i ++){
for(int j = -1; j<= 1; j++){
vector<int> b(a);
b[0] += i;
b[1] += j;
int d = b[1] - b[0];
int res = abs(i) + abs(j);
for(int k = 2; k < n && res <= ans; k++){
int dd = b[k] - b[k - 1];
if (dd == d)
continue;
else if(dd == d + 1){
b[k]--;
res ++;
}
else if(dd == d - 1){
b[k] ++;
res ++;
}
else
res = inf;
}
ans = min(res, ans);
}
}
if(ans == inf)
cout << -1 << endl;
else
cout << ans << 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();
return 0;
}
E.Bus Video System
题意大概就是给你公交车每站上下车的人数和公交车的最大限乘人数,问你在开始的时候公交车人数有多少情况
可以先求出前缀和,找到上车人数最多的时候,用限乘减去它就是可以在此之前车上最多承载的人数,当然也有可能全是下车的,所以也要找到下车人数最多的时候,即要保证在最开始车上有这么多人,当然车上最开始也是可以一个人都没有的,所以还要两者的差值再加上+1
#include <bits/stdc++.h>
#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;
/*
*/
int a[N];
void solve()
{
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> a[i];
a[i] = a[i] + a[i - 1];
}
int r = min(m, m - *max_element(a + 1, a + n + 1));
int l = max(0ll, -*min_element(a + 1, a + n + 1));
cout << max(0ll, r - l + 1) << 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();
return 0;
}
F.Mentors
题意大概就是给出n个人的能力值,能力值大的可以当能力值小的人的老师,但是现在有m个矛盾,发生矛盾的两人不能成为师生,问最后每个人可以当多少人的老师
可以先用a,b两个数组存能力值,对b数组排序,再用一个数组c存每个人可以成为多少人的老师,对循环a数组,对每个人的能力值去b数组中二分查找,其对应下标就是该数组a中能力值的人的学生数,最后对输入的各个矛盾,判断谁能力值更大,大的那个人学生数减1即可
#include <bits/stdc++.h>
#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 a[N];
void solve()
{
cin >> n >> k;
vector<int> a(n);
for(int i = 0;i < n; i++){
cin >> a[i];
}
auto b = a;
vector<int> c(n,0);
sort(b.begin(), b.end());
for(int i = 0;i < a.size(); i++){
c[i] = lower_bound(b.begin(), b.end(),a[i]) - b.begin();
}
while(k--){
int x,y;
cin >> x >> y;
x--,y--;
if(a[x] > a[y])
c[x]--;
else if(a[x] < a[y])
c[y]--;
}
for(auto i : c)
cout << i << ' ';
}
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;
}
G.Petya's Exams
题意大概就是学生要在n天内完成m场考试,给出每场考试知道的日期和考试日期以及需要为这场考试复习需要多少天,问能否给出一个合理的规划将所有每场考试开考前复习完,不能就输出-1,能就输出n天的规划
在输入的时候可以先标记每场考试的日期,在之后的考试日期有冲突的可以直接输出-1,再就是可以对每场考试按终止日期排序,在此之前每过一天就复习天数减1,如果到考试时复习天数还未减至0说明不能完成复习,直接输出-1即可
#include <bits/stdc++.h>
#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 a[N];
struct Time{
int s,e,d,id;
bool operator < (const Time &s)const {
if(e != s.e) return e < s.e;
}
}day[N];
void solve()
{
cin >> n >> m;
vector<int> a(n + 1);
for(int i = 0;i < m; i++){
cin >> day[i].s >> day[i].e >> day[i].d ;
day[i].id = i + 1;
if(a[day[i].e]) {
puts("-1");
exit(0);
}
a[day[i].e] = m + 1;
}
sort(day, day + n);
for(auto [s,e,d,id] : day){
for(int i = s;i < e && d > 0; i++){
if(a[i])
continue;
a[i] = id;
d--;
}
if(d == 0)
continue;
puts("-1");
exit(0);
}
for(int i = 1;i <= n; i++){
cout << a[i] << ' ';
}
}
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;
}
SMU Spring 2023 Trial Contest Round 10的更多相关文章
- Spring 源码学习笔记10——Spring AOP
Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-a ...
- Codeforces Beta Round #10 D. LCIS
题目链接: http://www.codeforces.com/contest/10/problem/D D. LCIS time limit per test:1 secondmemory limi ...
- spring security 3中的10个典型用法小结
spring security 3比较庞大,但功能很强,下面小结下spring security 3中值得 注意的10个典型用法 1)多个authentication-provide可以同时使用 &l ...
- Codeforces Beta Round #10 D. LCIS 动态规划
D. LCIS 题目连接: http://www.codeforces.com/contest/10/problem/D Description This problem differs from o ...
- Codeforces Beta Round #10 C. Digital Root 数学
C. Digital Root 题目连接: http://www.codeforces.com/contest/10/problem/C Description Not long ago Billy ...
- Codeforces Beta Round #10 B. Cinema Cashier 暴力
B. Cinema Cashier 题目连接: http://www.codeforces.com/contest/10/problem/B Description All cinema halls ...
- Codeforces Beta Round #10 A. Power Consumption Calculation 水题
A. Power Consumption Calculation 题目连接: http://www.codeforces.com/contest/10/problem/A Description To ...
- Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟
A. Gabriel and Caterpillar 题目连接: http://www.codeforces.com/contest/652/problem/A Description The 9-t ...
- spring 5.x 系列第10篇 —— 整合mongodb (代码配置方式)
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 配置文件位于com.heibaiying. ...
- # 曹工说Spring Boot源码(10)-- Spring解析xml文件,到底从中得到了什么(context:annotation-config 解析)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
随机推荐
- 使用allparis正交法,生成测试用例
原文:https://www.csdn.net/tags/MtzaggysODU0NTItYmxvZwO0O0OO0O0O.html 介绍工具前先讲下理论知识正交法一般适用于多个输入条件且条件与条件之 ...
- python重拾第八天-Socket网络编程
本节内容 Socket介绍 Socket参数介绍 基本Socket实例 Socket实现多连接处理 通过Socket实现简单SSH 通过Socket实现文件传送 作业:开发一个支持多用户在线的FTP程 ...
- 【价格全面下调】一片含税79元,双核A7@1.2GHz,-40℃~85℃真工业级!
自9个月前,创龙科技全志T113-i核心板(SOM-TLT113)推出之后,受到广大工业用户的高度关注,且超过300家企业已选用创龙科技T113-i核心板用于终端产品开发. 为了让更多用户轻松选择T1 ...
- sprak应用执行过程
- java springboot监听事件和处理事件
在Spring Boot中,监听和处理事件是一种常用的模式,用于在应用程序的不同部分之间传递信息.Spring 的事件发布/订阅模型允许我们创建自定义事件,并在这些事件发生时由注册的监听器进行处理.这 ...
- 用 Git 操作的数据库?这个项目火了!
# 用 Git 操作的数据库?这个项目火了!> 超级特别又实用的数据库,快来补课!Git 是一个开源的分布式版本控制系统,可以敏捷高效地管理代码,让项目代码支持同时存在多个不同的版本和分支,是程 ...
- npm ERR! `perfix` is not a valid npm option
全局路径cmd命令:npm config set perfix "D:\Program Files\nodejs\node_global" 缓存路径cmd命令:npm config ...
- oeasy教您玩转vim - 33 - # 查找文本
文字区块 回忆上节课内容 括号间跳转 成对括号间跳转 % 不成对括号间跳转 [( 跳转到上一个没配对的 ( [) 跳转到下一个没配对的 ) [{ 跳转到上一个没配对的 { [} 跳转到下一个没配对 ...
- IDEA整合Spring+Struts+Hibernate项目
新手使用idea整合Spring+Struts+Hibernate项目 项目所需jar下载: https://download.csdn.net/download/weixin_44906002/12 ...
- SpringBoot配置过滤器、拦截器
拦截器概述 Spring Boot提供了一种简单且强大的方式来定义和使用拦截器(Interceptor).Spring Boot的拦截器基于Spring框架的拦截器机制,可以在请求的处理过程中插入自定 ...