Codeforces Round 903 (Div. 3)

A. Don't Try to Count

大概题意给你两个字符串a,b。a串可进行的操作为将整个a串复制到之前的a串后面(直接用a+a即可),然后看操作多少次可以让b串变为a串的子串如果不能就输出-1。

#include <iostream>
using namespace std;
string a,b;
void solve()
{
int n,m;
cin>>n>>m;
cin>>a>>b;
int cnt=0;
while(n<m)
{
a=a+a;
n<<=1;
cnt++;
}
for(int i=0;i<n;++i)
{
bool pd=1;
for(int j=i;j<i+m;++j)
{
if(a[j]!=b[j-i])
{
pd=0;
break;
}
}
if(pd)
{
cout<<cnt<<endl;
return ;
}
}
a=a+a;
n<<=1;
cnt++;
for(int i=0;i<n;++i)
{
bool pd=1;
for(int j=i;j<i+m;++j)
{
if(a[j]!=b[j-i])
{
pd=0;
break;
}
}
if(pd)
{
cout<<cnt<<endl;
return ;
}
} cout<<-1<<endl;
}
int main() {
int t;
cin>>t;
while(t--) {
solve();
}
return 0;
}

B. Three Threadlets

题意:给三个数,分开他们使得剩下的为相同的

思路:三次分法,可以不完全用,所以只需要考虑最差的情况,将三个数排序为max,min,mid。如果三个数相等直接输出“YES”,如果三个数不相等的话那么就不能分min,如果mid也可以不分的话那么就有这两种情况

$$

max:mid:min=3:2:1(三次都用)/2:2:1(只用两次)

$$

如果mid=min那么只有max需要分那么就有比例为

$$

max:mid:min=4:1:1/3:1:1/2:1:1

$$

#include <iostream>
using namespace std;
void solve(){
int a,b,c;
cin>>a>>b>>c;
if(a==b&&b==c) {
cout<<"YES"<<"\n";
return ;
}int ma=a,mi=a;
ma=max(ma,b);
ma=max(ma,c);
mi=min(mi,b);
mi=min(mi,c);
int mid=a+b+c-mi-ma;
if(ma==2*mi&&mid==2*mi) {
cout<<"YES"<<"\n";
return ;
}if(mid==mi&&ma==3*mi){
cout<<"YES"<<"\n";
return ;
}if(ma==3*mi&&mid==2*mi) {
cout<<"YES"<<"\n";
return ;
}if(mid==mi&&ma==2*mi){
cout<<"YES"<<"\n";
return ;
}if(mid==mi&&ma==4*mi){
cout<<"YES"<<"\n";
return ;
}
cout<<"NO"<<"\n";
}
int main() {
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}

C. Perfect Square

题意:有一个正方形矩阵,我们对其的操作一次为将一个字母++,当这个字母变成'z'时就不会再改变了,问多少次之后我们旋转90°之后和原来的矩阵重合

思路:一共有四种(90/360),我们可以求出这四个坐标中最大的,然后剩下的++记作一次操作

#include <bits/stdc++.h>
using namespace std;
char mp[1010][1010];
void solve(){
int m;
cin>>m;
long long int res=0;
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
}
}
for(int i=1;i<=m/2;i++){
for(int j=1;j<=m/2;j++){
int ma=max(mp[i][j],max(mp[m-j+1][i],max(mp[m-i+1][m-j+1],mp[j][m-i+1])));
res+=ma*4-mp[i][j]-mp[m-j+1][i]-mp[m-i+1][m-j+1]-mp[j][m-i+1];
}
}
cout<<res<<endl;
}
int main()
{
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}

D. Divide and Equalize

题意:操作:找到一个数x使得ai=ai/x;aj=aj/x;要求:所有数相等

思路:这个变化会使他的乘积没有变化,故我们可知他们的乘积为一个数的n次方,那么他的因数个数应该为n的倍数。

板子:质因数分解

void divide(int x)
{
for (int i = 2; i <= x / i; i ++ )
if (x % i == 0)
{
int s = 0;
while (x % i == 0) x /= i, s ++ ;
cout << i << ' ' << s << endl;
}
if (x > 1) cout << x << ' ' << 1 << endl;
cout << endl;
}
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;
cin>>n;
map<int,int> q;
for(int j=0;j<n;j++){
int x;
cin>>x;
for (int i = 2; i <= x / i; i ++ )
if (x % i == 0)
{
int s = 0;
while (x % i == 0) x /= i, s ++ ;
q[i]+=s;
}
if (x > 1) q[x]++;
}
for(auto x:q){
if(x.second%n!=0){
cout<<"NO"<<"\n";
return ;
}
}
cout<<"YES"<<"\n";
}
signed main() {
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}

E. Block Sequence

题意:操作:删除一个数;要求:让数列分成一块一块的(什么叫块:假设你a[i]=x,那么a[i]~a[i+x-1]为一个块)

1.把自身直接删了dp[i]=dp[i-1]+1;

2.假设左边已经有一个完美的块,要使整个序列都为完美,只需要后面也为完美块,假设后面的数<a[i],dp[i]=d[i+1]+1;如果相等dp[i]=0,如果后面的数>a[i]那么dp[i]=ap[i+a[i]+1];

#include <bits/stdc++.h>
using namespace std;
const int MAX=1e6+10;
int dp[MAX],arr[MAX];
void solve()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>arr[i];
}
dp[n + 1] = 0;
for(int i = n; i >= 0; i --)
{
if(arr[i] + i > n) dp[i] = dp[i + 1] + 1;
else if(arr[i] + i == n) dp[i] = 0;
else dp[i] = dp[i + arr[i] + 1];
dp[i] = min(dp[i], dp[i + 1] + 1);
}
cout << dp[0] << '\n';
}
int main()
{
int t;
cin>>t;
while (t--){
solve();
}
return 0;
}

F. Minimum Maximum Distance

题意:求min(max(顶点到所有标记点距离))

思路:树上任一点到其他点最远的距离即为到树的直径的两个端点中的一个的距离,跑两遍bfs求一下两个端点,最后再求所有最大值中的最小值即可

板子:bfs

queue<int> q;
st[1] = true; // 表示1号点已经被遍历过
q.push(1); while (q.size())
{
int t = q.front();
q.pop(); for (int i = h[t]; i != -1; i = ne[i])
{
int j = e[i];
if (!st[j])
{
st[j] = true; // 表示点j已经被遍历过
q.push(j);
}
}
}
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 400010;
vector<int> v[N];
int dist[N], f[N];
int st[N];
int n, k; int bfs(int u)
{
for (int i = 1; i <= n; i++)dist[i] = -1;
queue<int> q;
q.push(u);
dist[u] = 0; while (q.size())
{
int t = q.front();
q.pop();
for (auto i : v[t])
{
int j = i;
if (dist[j] == -1)
{
dist[j] = dist[t] + 1;
q.push(j);
}
}
} int ans = -1;
for (int i = 1; i <= n; i++)
{
if (st[i] && (ans == -1 || dist[i] > dist[ans]))
{
ans = i;
}
}
return ans;
}
void solve()
{
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
v[i].clear();
}
for (int i = 1; i <= n; i++)st[i] = 0;
for (int i = 1; i <= k; i++)
{
int x;
cin >> x;
st[x] = 1;
}
int m = n - 1;
while (m--)
{
int a, b;
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
} int a = bfs(1);
int b = bfs(a);
for (int i = 1; i <= n; i++)f[i] = dist[i];
bfs(b); for (int i = 1; i <= n; i++)
{
f[i] = max(f[i], dist[i]);
}
int minans = 1e18;
for (int i = 1; i <= n; i++)
{
minans = min(minans, f[i]);
}
cout << minans << endl;
} signed main()
{
int t;
cin>>t;
while (t--)
{
solve();
} }

Codeforces Round 903 (Div. 3)的更多相关文章

  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. 基于proxysql实现MySQL读写分离

    前言 环境: 系统版本:CentOS 7 MySQL版本:5.7.35 MySQL主从配置略过. 安装 # 安装 yum localinstall -y ./proxysql-2.2.0-1-cent ...

  2. Godot无法响应鼠标点击等输入事件时,检查这些内容

    注:本文以Godot 4.0 为基准,可能其他版本也能参考. 这是我用C#写项目时发现的,可能和gdscript使用者遇到的问题有一定区别. 如果你用Godot制作的游戏无法响应鼠标点击等输入事件,请 ...

  3. __wakeup()魔术方法绕过(CVE-2016-7124)

    __wakeup()魔术方法绕过(CVE-2016-7124) 漏洞简介 在php反序列化数据过程中,如果类中存在__wakeup方法,调用 unserilize() 方法前则先调用__wakeup方 ...

  4. VA01/VA02/VA03/VA05 销售订单隐藏价格

    1.业务需求 针对用户使用销售订单时,判断是否有权限,没有权限时隐藏销售订单抬头和行项目的价格相关字段 2.增强实现 2.1.隐藏抬头和行项目价格 隐藏抬头和行项目表格中的净值和净价字段 在程序MV4 ...

  5. QA|20211013|SecureCRT:如图,有很多^,中文显示有问题,乱码,如何解决

    Q1:如图,有很多^,中文显示有问题,乱码,如何解决 Q2:securecrt的vi展示有问题:少很多字.有很多^M和^,光标无法移动到最右侧 A: 首先检查当前编码格式: 1 echo $LANG ...

  6. 提高 Web 开发效率的10个VS Code扩展插件,你知道吗?

    前言 一个出色的开发工具可以显著提高开发人员的开发效率,而优秀的扩展插件则能更进一步地提升工具的效率.在前端开发领域,VSCode毫无疑问是目前最受欢迎的开发工具.为了帮助前端开发人员提高工作效率,今 ...

  7. C#集成ViewFaceCore人脸检测识别库

    前言 人脸检测与识别现在已经很成熟了,C# 上有 ViewFaceCore 这个很方便的库,但这种涉及到 native 调用的库,一般会有一些坑,本文记录一下开发和部署的过程. 本文的项目是 AIHu ...

  8. 「codeforces - 185D」Visit of the Great

    link. 简单提一下做法,注意到 \(k^{2^a}\equiv k^{2^b}\equiv-1\equiv (-1)^{2^{b-a}}=1\pmod{(k^{2^a}+1,k^{2^{b}}+1 ...

  9. Solution Set -「ABC 205」

    应该是最近最水的 ABC 了吧. 「ABC 205A」kcal Link. 略 #include <bits/stdc++.h> using ll = long long; #define ...

  10. How to install Django¶

    This document will get you up and running with Django. Install Python Being a Python Web framework, ...