Codeforces Round #656 (Div. 3)(A-E)
时间:2021-09-05
本文章向大家介绍 Codeforces Round #656 (Div. 3)(A-E),主要包括 Codeforces Round #656 (Div. 3)(A-E)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
A. Three Pairwise Maximums
题意:给出x,y,z,其中x=max(a,b),y=max(a,c),z=max(b,c),能否求出a,b,c.
题解:发现若a,b,c存在,则有x<y=z的大小关系,a,b,c中的最大值和次大值就知道了。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int T;
int main()
{
cin>>T;
while(T--)
{
int a[4];
cin>>a[1]>>a[2]>>a[3];
sort(a+1,a+3+1);
if(a[3]!=a[2])
{
cout<<"NO\n";
continue;
}
cout<<"YES\n";
cout<<a[3]<<" "<<a[1]<<" "<<"1\n";
}
return 0;
}
B. Restore the Permutation by Merger
拿个桶判断 没出现输出就行
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int T,n;
int vis[55];
int main()
{
cin>>T;
while(T--)
{
cin>>n;
n=n*2;
int x;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
cin>>x;
if(!vis[x])
{
cout<<x<<" ";
vis[x]=true;
}
}
cout<<endl;
}
return 0;
}
C. Make It Good
题意:删除字符串a最小前缀,满足被删前缀后的字符串a,每次从头或尾取字符组成的字符串c不减。
题解:若c不减,则a必须是先递增再递减的形式,即是单峰。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 200009
using namespace std;
int T;
int n;
int a[N];
int main()
{
cin>>T;
while(T--)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int now=n;
for(int i=n;i>=1;i--)
{
if(a[i]<=a[i-1]) now--;
else break;
}
int tmp=now;
for(int i=tmp;i>=1;i--)
{
if(a[i]>=a[i-1]) now--;
else break;
}
if(now)now--;
cout<<now<<endl;
}
return 0;
}
D. a-Good String
最少修改多少次,让字符串变为a-good string
.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 131077
using namespace std;
int T;
int n,len,ans;
char s[N];
int a[30][N];
//12345678
void slove(int l,int r,int tp,int now)
{
if(l==r)
{
if(s[l]-'a'+1!=tp) now++;
ans=min(ans,now);
return ;
}
int mid=(l+r)>>1;
slove(mid+1,r,tp+1,now+(mid-l+1)-(a[tp][mid]-a[tp][l-1]));
slove(l,mid,tp+1,now+(r-mid)-(a[tp][r]-a[tp][mid]));
}
int main()
{
cin>>T;
while(T--)
{
cin>>n;
scanf("%s",s+1);
len=strlen(s+1);ans=len;
for(int i=1;i<=len;i++)
{
for(int j=1;j<=26;j++)
{
a[j][i]=a[j][i-1];
}
a[s[i]-'a'+1][i]++;
}
slove(1,len,1,0);
cout<<ans<<endl;
}
return 0;
}
E. Directing Edges.
题目大意:给你一张图,只有部分边确定方向,有的边没有确定方向,有没有一种确定方向的方法,让这张图为有向无环图。
题解:先在有向边的基础上跑拓扑排序,无向边使拓扑序小的指向拓扑序大的。
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define N 200009
using namespace std;
queue<int>q;
int T,js;
bool flag;
int n,m;
int sumedge;
int head[N],xx[N],yy[N],vis[N],col[N],In_du[N],dep[N];
struct Edge
{
int x,y,nxt;
Edge(int x=0,int y=0,int nxt=0):
x(x),y(y),nxt(nxt){}
}edge[N];
void add(int x,int y)
{
edge[++sumedge]=Edge(x,y,head[x]);
head[x]=sumedge;
}
void Clear_Init()
{
memset(In_du,0,sizeof(In_du));
memset(head,0,sizeof(head));
while(!q.empty()) q.pop();
sumedge=0;flag=true;js=0;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int p,x,y;
cin>>p>>x>>y;
if(p==1)
{
add(x,y);
In_du[y]++;
}
xx[i]=x,yy[i]=y;
}
}
bool DFS(int x)
{
vis[x]=true;
col[x]=0;
for(int i=head[x];i;i=edge[i].nxt)
{
int v=edge[i].y;
if(col[v]==0) return false;
else if(col[v]==-1&&!DFS(v)) return false;
}
col[x]=1;
return true;
}
void pre_slove()
{
for(int i=1;i<=n;i++)
{
if(!vis[i]&&!DFS(i))
{
cout<<"NO\n";
flag=false;
return ;
}
}
}
void Top_sort()
{
for(int i=1;i<=n;i++)
{
if(!In_du[i]) q.push(i);
}
while(!q.empty())
{
int now=q.front();q.pop();
dep[now]=++js;
for(int i=head[now];i;i=edge[i].nxt)
{
int v=edge[i].y;
In_du[v]--;
if(!In_du[v]) q.push(v);
}
}
}
void Put()
{
cout<<"YES\n";
for(int i=1;i<=m;i++)
{
int x=xx[i],y=yy[i];
if(dep[x]<dep[y]) cout<<x<<" "<<y<<endl;
else cout<<y<<" "<<x<<endl;
}
}
int main()
{
cin>>T;
while(T--)
{
Clear_Init();
//pre_slove();
//if(!flag) continue;
Top_sort();
if(js<n) cout<<"NO\n";
else Put();
}
return 0;
}
原文地址:https://www.cnblogs.com/zzyh/p/15230763.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- redis设计与实现系列1-SDS
- LinkedList - 876. Middle of the Linked List
- Array - 48. Rotate Image
- string- 43. Multiply Strings
- Array - 34. Find First and Last Position of Element in Sorted Array
- Array - 31. Next Permutation
- Docker快速部署一个属于你自己的博客
- golang实现BST和AVL
- golang实现跳表(SkipList)
- 一致性哈希的golang实现
- Array - 75. Sort Colors
- Array - 309. Best Time to Buy and Sell Stock with Cooldown
- Array - 55. Jump Game
- 【技术创作101训练营】超简单的公司Git+个人Git共存方式
- css高度坍塌与清除浮动