总结

T1

题目大意:

A,B两人玩游戏,游戏规则如下:

整场游戏有多轮,每轮游戏先胜 \(X\) 局的人获胜,每场游戏先胜 \(Y\) 局的人获胜。

你在场边观看了比赛,但是你忘记了 \(x\) 和 \(y\) ,只记得总共比了 \(1 \le n \le 20\) 局,和每局获胜的人,请判断谁获胜了。如果A获胜,输出 A ,如果B获胜,输出 B ,如果都有可能,输出 ?

翻自洛谷CF1894A

分析:

不难看出最后一局胜利的就是胜利的人。

提示:若已经决出胜负,则不会继续进行比赛。

code:

#include <bits/stdc++.h>
using namespace std; int main ()
{
int t;
cin>>t;
while(t--)
{
int n,ans=0;
cin>>n;
string s;
cin>>s;
cout<<s[n-1]<<'\n';
}
return 0;
}

T2

题意:

给定一个数组 \(a_1, a_2, ..., a_n\)。你需要找到一个数组 \(b_1\), \(b_2\), ..., \(b_n\),其中包含数字 \(1, 2, 3\),使得以下三个条件中恰好有两个条件被满足:

  • 存在 \(1\le i, j\le n\),使得 \(a_i=a_j,b_i=1,b_j=2\)。
  • 存在 \(1\le i, j\le n\),使得 \(a_i=a_j,b_i=1,b_j=3\)。
  • 存在 \(1\le i, j\le n\),使得 \(a_i=a_j,b_i=2,b_j=3\)。

如果不存在这样的数组 \(b\),请报告不可以。

翻自洛谷CF1894B

分析:

三个条件的前提条件都是有两个数相等,也就是说我们只要处理相等的数。不相等的数全部置为1。再来考虑相等的数,如果几个数相等,把它们分别置为1,2,3,则必定满足三个条件。所以只能有两个数如1,3,使他满足一个条件,再找另一组相同的数,使他满足另一条件。

具体只需一个桶统计数的个数,第一组个数大于1的数置为2,第二组个数大于1的数置为3,其他数置为1。

如: 1 2 3 4 2 1 4 3 4 2 1

输出:2 2 1 1 1 1 1 1 1 1 1

code:

#include <bits/stdc++.h>
using namespace std;
const int N=105;
int a[N],b[N],c[N];
int main ()
{
int t;
cin>>t;
while(t--)
{
int n;
int x=0,y=0,x1,x2,st=0;
cin>>n;
for(int i=1;i<=100;i++) b[i]=0,c[i]=1;
for(int i=1;i<=n;i++) cin>>a[i],b[a[i]]++;
for(int i=1;i<=100;i++) if(b[i]>1) x++;
if(x<2) st=1;
if(st)
{
cout<<-1<<'\n';
continue;
}
y=2;
for(int i=1;i<=n;i++)
{
if(b[a[i]]>1&&y<4) cout<<y<<" ",y++,b[a[i]]=0;
else cout<<1<<" ";
}
cout<<'\n';
}
return 0;
}

T3

题意:

给定长度为 \(n\) 的数列 \(a\),定义一次轮换为将 \(a_1,a_2,\cdots,a_n\) 变为 \(a_2,a_3,\cdots,a_n,a_1\)。

定义一次操作为,先选择一个满足 \(a_x=x\) 的数 \(x\),然后对数列做 \(x\) 次轮换。

再给定 \(k\) 与数列 \(b\),求是否存在一个初始序列 \(a\),使得其能经过恰好 \(k\) 次合法的操作变为 \(b\)。

\(n\leq 2\times 10^5,k\leq 10^9\)。

翻自洛谷CF1893A

分析:

本题最最最关键一点是 \(a_x\) 轮换 \(x\) 次后,都会变成 \(a_n\) 。

从这入手,倒推的话我们每次只需考虑 \(a_n\) , \(a_n\) 一定是从 \(a_x\) 推过来的.如:7 2 1 一定是由 1 7 2 推过来的。

则我们只需考虑如果 \(a_n \le n\),进行还原操作,把数组向右移动 \(a_n\) 。如果 \(a_n > n\),则说明无法返回,输出 No

还原只需一个变量 move,循环不一定用 k 次,因为只有最多 n 个状态。

code:

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N];
int main ()
{
int t;
cin>>t;
while(t--)
{
int n,k,move=0,st=1;
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
if(k>n) k=n;
for(int i=1;i<=k;i++)
{
if(a[n-move]>n)
{
cout<<"No"<<'\n';
st=0;
break;
}
else
{
move+=a[n-move];
if(move>=n) move-=n;
}
}
if(st) cout<<"Yes"<<'\n';
}
return 0;
}

T4

题意:

给定两个序列 \(a,b\),将 \(b\) 中所有元素以任意顺序在任意位置插入 \(a\) 中,使得形成的新序列 \(c\) 的最长上升子序列最短,输出你的序列 \(c\)。

翻自洛谷CF1893B

分析:

\(a\) 序列的顺序是不变的,也就是说 \(LIS(c)\) 的大小至少为 \(LIS(a)\)。考虑是否一定能使 \(LIS(c)=LIS(a)\),显然是可以的。首先将 \(b\) 序列排序,\(LIS(b)=0\),然后,\(a,b\) 中元素,哪个大就把哪个插入到 \(c\) 中,使用两个指针,贪心更新 \(c\)。

code:

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N];
int main ()
{
int t;
cin>>t;
while(t--)
{
int n,k,move=0,st=1;
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
if(k>n) k=n;
for(int i=1;i<=k;i++)
{
if(a[n-move]>n)
{
cout<<"No"<<'\n';
st=0;
break;
}
else
{
move+=a[n-move];
if(move>=n) move-=n;
}
}
if(st) cout<<"Yes"<<'\n';
}
return 0;
}

T5

题意:

注:下文中的 multiset 均为可重集。

我们定义一个大小为 \(len\) 的 multiset 的不优美度为数 \(len\) 在这个 multiset 里的出现次数。

给你 \(m\) 个 multiset,第 \(i\) 个 multiset 包含 \(n_i\) 个不同的元素,具体的:这个 multiset 中含有 \(c_{i,1}\) 个 \(a_{i,1}\),\(c_{i,2}\) 个 \(a_{i,2}\),\(\dots\),\(c_{i,n_i}\) 个 \(a_{i,n_i}\)。保证 \(a_{i, 1} < a_{i, 2} < \ldots < a_{i, n_i}\)。同时给你 \(l_1, l_2, \ldots, l_m\) 和 \(r_1, r_2, \ldots, r_m\),其中 \(1 \le l_i \le r_i \le c_{i, 1} + \ldots + c_{i, n_i}\) 。

我们按照如下操作创建一个 multiset X ,最初 X 为空。然后,对于 \(1\) 到 \(m\) 的每一个数 \(i\),执行下面的操作:

1.选择一个数 \(v_i\) 使得 \(l_i \le v_i \le r_i\)

2.从第 \(i\) 个 multiset 里选择任意 \(v_i\) 个数并把它们加入 X 。

你的任务是选择 \(v_1, \ldots, v_m\) ,使得 multiset X 的不优美度最小。

多测,\(1 \le t \le 10^4\) , \(1 \le m \le 10^5\),\(1 \le n_i \le 10^5, 1 \le l_i \le r_i \le c_{i, 1} + \ldots + c_{i, n_i} \le 10^{17}\),\(1 \le a_{i, 1} < \ldots < a_{i, n_i} \le 10^{17}\), \(1 \le c_{i, j} \le 10^{12}\) ,\(m\) 的总和以及所有数据里的 \(n_i\) 的总和不超过 \(10^5\)。

翻自洛谷CF1893C

没看懂题意 qwq。

Codeforces Round 908 (Div. 2)的更多相关文章

  1. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  2. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  6. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  7. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  8. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

  9. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

  10. 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts

    题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...

随机推荐

  1. goto关键词

    1.前言 goto,一个蒟蒻一用就废,大佬一用就吊炸天的神奇关键字. 今天,我要来盘它!!! 2.goto只能在函数内实现跳转,不能跨函数跳转 因为标号label是局部有效的. #include &l ...

  2. Windows 11 + Samsung 980 踩坑:在 LocalDB 15.0 实例启动期间出错: 无法启动 SQL Server 进程(附赠 查询指定日期范围内的前1000条SQL执行记录)

    Windows 11 + Samsung 980 踩坑:在 LocalDB 实例启动期间出错: 无法启动 SQL Server 进程 起因 用 Microsoft Visual Studio 2022 ...

  3. 【源码系列#02】Vue3响应式原理(Effect)

    专栏分享:vue2源码专栏,vue3源码专栏,vue router源码专栏,玩具项目专栏,硬核推荐 欢迎各位ITer关注点赞收藏 Vue3中响应数据核心是 reactive , reactive 的实 ...

  4. Java核心知识体系7:线程安全性讨论

    Java核心知识体系1:泛型机制详解 Java核心知识体系2:注解机制详解 Java核心知识体系3:异常机制详解 Java核心知识体系4:AOP原理和切面应用 Java核心知识体系5:反射机制详解 J ...

  5. [NOI online2022普及C]字符串

    题目描述 Kri 非常喜欢字符串,所以他准备找 \(t\) 组字符串研究. 第 \(i\) 次研究中,Kri 准备了两个字符串 \(S\) 和\(R\) ,其中 \(S\) 长度为 \(n\),且只由 ...

  6. 【问题解决】unable to do port forwarding: socat not found

    问题复现 前阵子应公司要求做华为云平台的调研,写了一篇文档包含将华为云CCE下载kuberctl配置及使用kubectl转发流量到本地的操作. 今天一早上同事就发来一个错误界面,说是Java远程调试转 ...

  7. C# 提取PDF中指定文本、图片的坐标

    获取PDF文件中文字或图片的坐标可以实现精确定位,这对于快速提取指定区域的元素,以及在PDF中添加注释.标记或自动盖章等操作非常有用.本文将详解如何使用国产PDF库通过C# 提取PDF中指定文本或图片 ...

  8. Redis存储商品热度

    项目中有一个需求,就是可以根据商品的热度进行排序 起初想着使用string类型来存储如: sku:hotscore:商品的ID 但是这回有个问题,当商品数量多了那k-v岂不是得炸了,维护起来也非常不方 ...

  9. ES索引误删的名场面

    ES索引误删的名场面 慌了3秒,果断发个邮件: 01 最近,在版本发布时: ES线上未备份的索引,被当场「误删」了: 对于新手来说,妥妥的社死名场面: 对于老手来说,慌它3秒表示一下态度: 当时的情况 ...

  10. 51Nod 1085 01背包

    01背包入门题,刚学完当写模板. 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整数),与之相对应的价值为P1,P2--Pn(Pi为整数).求背包能够容纳的最大价 ...