ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Noip模拟82 2021.10.21

2021-10-22 09:01:59  阅读:151  来源: 互联网

标签:ch 21 Noip int top stk -- 82 include


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

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

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

T1 魔法

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

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

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

 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 连通性

 

标签:ch,21,Noip,int,top,stk,--,82,include
来源: https://www.cnblogs.com/hzoi-wsn/p/15437104.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有