Noip模拟82 2021.10.21

感冒了,考试的时候跟去世了一样,头晕脑胀只会打暴力了,真的头疼

可恶,明天就走了,希望能在后天之前差不多好,不是说感冒一般七天吗?已经五天了,差不多得了。。。。

千万不要考场上还头昏脑胀,$rp++$吧,(希望在链式前向星加边的时候已经加够了。。。。)

T1 魔法

考场上想到了使用队列, 但是后来发现不好判断区间是否合法,于是就打了乱搞做法

然后在$Arbiter$上测居然有$70pts$?

正解就是栈,然后维护栈内的前缀和,表示红球有几个,在栈顶往下数$R+B$个球,如果里面红球个数正好就弹栈记答案

Noip模拟82 2021.10.21
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 inline int read(){
 7     int x=0,f=1; char ch=getchar();
 8     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
 9     while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
10     return x*f;
11 }
12 const int NN=1e5+5;
13 int n,R,B,s[NN],sm[NN],c0,c1;
14 int top,stk[NN];
15 char ch[NN];
16 inline void task1(){
17     if((B==0)||(c1!=0)||(c0%B!=0)) return puts("NO"),void();
18     int cnt=1,tmp=c0/B;puts("YES");printf("%d\n",tmp);
19     for(int i=1;i<=tmp;i++){for(int j=1;j<=B;j++)printf("%d ",cnt),++cnt;puts("");}
20 }
21 inline void task2(){
22     if((R==0)||(c0!=0)||(c1%R!=0)) return puts("NO"),void();
23     int cnt=1,tmp=c1/R;puts("YES");printf("%d\n",tmp);
24     for(int i=1;i<=tmp;i++){for(int j=1;j<=R;j++)printf("%d ",cnt),++cnt;puts("");}
25 }
26 int ans[NN],tot,tag[NN];
27 namespace WSN{
28     inline short main(){
29         freopen("magic.in","r",stdin);
30         freopen("magic.out","w",stdout);
31         n=read();R=read();B=read();scanf("%s",ch+1);n=strlen(ch+1);
32         if((!R)&&(!B)) return puts("NO"),0;
33         for(int i=1;i<=n;i++){
34             s[i]=(ch[i]=='R');
35             if(ch[i]=='R') ++c1; else ++c0;
36         }
37         if(R==0)return task1(),0;if(B==0)return task2(),0;
38         if((c0%B!=0)||(c1%R!=0)) return puts("NO"),0;
39         if(c0/B!=c1/R) return puts("NO"),0;
40         int tmp=c0/B;
41         for(int i=1;i<=n;i++){
42             stk[++top]=i;
43             sm[stk[top]]=sm[stk[top-1]]+s[i];
44             if(top>=R+B&&sm[stk[top]]-sm[stk[top-(R+B)]]==R){
45                 tag[tot+1]=1;
46                 for(int j=i;j>=i-(R+B)+1;j--)
47                     ans[++tot]=stk[top--];
48             }
49         }
50         // cout<<top<<endl;
51         // for(int i=1;i<=top;i++) cout<<stk[i]<<" ";cout<<endl;
52         if(top) return puts("No"),0;
53         puts("YES");printf("%d\n",tmp);
54         for(int i=tot;i;i--){
55             printf("%d ",ans[i]);
56             if(tag[i]) puts("");
57         }
58         return 0;
59     }
60 }
61 signed main(){return WSN::main();}
View Code

 

T2 连通性

Noip模拟82 2021.10.21

 

上一篇:UCOS-III学习(一)——创建任务


下一篇:20. 有效的括号