开赛
乘着车,打着盹,一路颠簸来到南京了。可惜不是来旅游的啊。毕竟这是第一次参加信息竞赛,可能也是最后一次。
题目
1.廊桥分配
说实话,我不看好我自己。鼓励什么都还是假的,我明白自己什么实力,自己应该在哪。这次没报普及大概是我一个错吧。人生总是有很多错误要经历的,也有很多后悔与失败,结果有时候总是充满戏剧性。
跳转题目
我在考场想到的是用并查集。因为我也想不到其他算法了
估分?不用了
#include<bits/stdc++.h>
using namespace std;
int n,m1,m2;
int un[100005][2];
int h[100005][2];
int sum1[100005],ans=0,sum=0;
int cnt[2]={1,1};
inline int read(){
int x=0,f=1;
char ch=getchar();
if(!isdigit(ch)){
f=-1;
ch=getchar();
}
while(isdigit(ch)){
x=x*10+ch-48;
ch=getchar();
}
return x*f;
}
void add(int x,int y,int z){
for(int j=1;j<=cnt[z];j++){
if(un[j][z]<x){
h[j][z]++;
un[j][z]=y;
return;
}
}
cnt[z]++;
un[cnt[z]][z]=y;
h[cnt[z]][z]++;
}
int main (){
//freopen("airport.in","r",stdin);
//freopen("airport.out","w",stdout);
n=read();
m1=read();
m2=read();
for(int i=0;i<=100000;i++){
h[i][0]=h[i][1]=0;
un[i][0]=un[i][1]=0;
}
for(int i=1;i<=m1;i++){
int a,b;
a=read();
b=read();
add(a,b,0);
}
for(int i=1;i<=m2;i++){
int a,b;
a=read();
b=read();
add(a,b,1);
}
sum1[0]=0;
for(int i=1;i<=n;i++)
sum1[i]=sum1[i-1]+h[i][0];
for(int i=0;i<=n;i++){
int j=n-i;
sum+=h[i][1];
ans=max(ans,sum+sum1[j]);
}
printf("%d",ans);
return 0;
}
样例过得去,但送到洛谷上爆零了。
后面不也baoling
2.括号序列
生活也许会充满惊喜,但更多会带来打击,当少数人站在光芒底下,又会有多少人在黑暗黯然神伤,又会有多少人为他们的成功负荆前行。没有人会甘于失败,只有放弃,释然,懊悔,与最后的逃离。
跳转题目
这道题应该是动规,但我不行啊。
只能用暴力过。
#include<bits/stdc++.h>
using namespace std;
char ch[505];
int n,k,s=0,x=0,ans=0;
void bl(int h){
h++;
//if(x>k) return;
if(ch[h]=='('){
s++;
x=0;
if(h==n&&s==0) ans++;
else bl(h);
}
if(ch[h]==')'){
s--;
x=0;
if(h==n&&s==0) ans++;
if(h<n) bl(h);
}
if(ch[h]=='*'){
x++;
if(h==n&&s==0) ans++;
if(h<n) bl(h);
}
if(ch[h]=='?'){
if(h==n&&s==0){
ans++;
}
if(h<n){
int _x=x+1;
s++;
x=0;
bl(h);
s-=2;
bl(h);
x=_x;
bl(h);
}
}
}
int main(){
freopen("bracket.in","r",stdin);
freopen("bracket.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=0;i<=n;i++)
ch[i]=getchar();
bl(0);
printf("%d",ans);
return 0;
}
暴力写的有问题,我是知道的。
爆零的话,意料之中吧。
3.回文
人生的道路总是漫长的,我们会跌倒,会哭泣,会害怕,会后悔,会畏惧前路。前路是什么,是光明?是黑暗?康庄大道?深不见底?不知道。我们并没有去经历,或者说,我们太注重前方的终点,忘记了两旁是什么光景。道路是漫长的,风景是无尽的,看看周围,放下自己的心,无论是何种结果,你都会在这条路上摘到一些美丽的花,陪着你走完一段又一段路。
跳转题目
打算使用O(n)的方式前后直接各取一遍,暴力查一遍流程。
#include<bits/stdc++.h>
using namespace std;
int a1[50001],a2[50001],b[100001];
bool vis[100001],v[100001];
int t,n;
bool dp(){
int x=b[1],k1=1,k2=2*n,y2=a2[x];
v[1]=1;
v[y2]=1;
int k3=y2-1,k4=y2+1;
for(int i=2;i<=n;i++){
if(b[k1]==b[k3]&&(!v[k1])&&(!v[k3])&&k1<k3){
vis[k3]=1;
vis[k1]=1;
v[k1]=v[k3]=1;
k3--;
k1++;
}
else if(b[k2]==b[k3]&&(!v[k2])&&(!v[k3])&&k1<k3){
vis[k3]=1;
vis[k2]=0;
v[k2]=v[k3]=1;
k3--;
k2--;
}
else if(b[k1]==b[k4]&&(!v[k1])&&(!v[k4])&&k2>k4){
vis[k4]=0;
vis[k1]=1;
v[k1]=v[k4]=1;
k4++;
k1++;
}
else if(b[k2]==b[k4]&&(!v[k2])&&(!v[k4])&&k2>k4){
vis[k4]=0;
vis[k2]=0;
v[k4]=v[k2]=1;
k4++;
k2--;
}
else return false;
}
return true;
}
int main(){
freopen("palin.in","r",stdin);
freopen("palin.out","w",stdout);
scanf("%d",&t);
for(int i=0;i<t;i++){
memset(a1,0,sizeof(a1));
memset(a2,0,sizeof(a2));
memset(b,0,sizeof(b));
memset(vis,0,sizeof(vis));
memset(v,0,sizeof(v));
scanf("%d",&n);
for(int i=1;i<=2*n;i++){
int a;
scanf("%d",&a);
if(a1[a]==0) a1[a]=i;
else a2[a]=i;
b[i]=a;
}
bool flag=dp();
if(flag){
for(int i=1;i<=2*n;i++){
if(vis[i]) printf("L");
else printf("R");
}
printf("\n");
}
else printf("-1\n");
}
return 0;
}
出岔了。。。
4.交通规划
“我希望我的后辈们能够记住,在你踏上职业道路的这一刻开始,你的目标就只有——冠军”——RNG小虎。
跳转题目
没有做出来。
这一年经历了很多,有的人中途离开了(孙YQ),有的人初赛失败了(王DL,裔DW),2020届真正走下来的没几个,我应该没多久也要退出了,去专门上文化课。当然,这个账号我还会打开,会写些杂文(大概)。希望YZOI未来能招进更多大佬。本蒟蒻在此祝愿YZOI越办越好!!!