第十三周 5.23 --- 5.29

省赛end

出了一点点状况...但是幸好最后都很顺利><

第一次当裁判呢>.<

 

每次判CHD的队的时候,都希望是绿绿的Yes!!!

 

新的一周也继续干巴爹>.</

 

5.23

cf 316div2 c C - Replacement

今天才发现...这个是 360当时的笔试题..

不过当时的做法不太对,在cf上 Tle48 ... 笔试的时候过了(当时就觉得不对劲,,果然变弱数据了..)

Update的时候分几种情况讨论下就可以了

不过不会用线段树去写诶.............

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 const int maxn = 3e5+5;
 8 char s[maxn];
 9 int n,m;
10 
11 void solve(){
12     int tot = 0;
13     for(int i = 1;i <= n;){
14         int j = i;
15         if(s[i] != '.'){
16             i++;
17             continue;
18         }
19         while(j <= n && s[j] == '.') j++;
20         tot += j-i-1;
21         i = j;
22     }
23     s[0] = 'a';s[n+1] = 'a';
24     int pos;
25     char cmd;
26     int ans = tot;
27     for(int i = 1;i <= m;i++){
28         scanf("%d %c",&pos,&cmd);
29     //    printf("pos = %d cmd = %c\n",pos,cmd);
30         if(cmd == '.'){
31             if(s[pos] != '.' && s[pos-1] == '.' && s[pos+1] == '.') ans+=2;
32             if(s[pos] != '.' && s[pos-1] == '.' && s[pos+1] != '.') ans++;
33             if(s[pos] != '.' && s[pos-1] != '.' && s[pos+1] == '.') ans++;
34         }
35         else{
36             if(s[pos] == '.' && s[pos-1] == '.' && s[pos+1] == '.') ans -= 2;
37             if(s[pos-1] == '.' && s[pos] == '.' && s[pos+1] != '.') ans--;
38             if(s[pos-1] != '.' && s[pos] == '.' && s[pos+1] == '.') ans--;
39         }
40         s[pos] = cmd;
41         printf("%d\n",ans);
42     }
43 }
44 
45 int main(){
46     while(scanf("%d %d",&n,&m) != EOF){
47         scanf("%s",s+1);
48         solve();
49     }
50     return 0;
51 }
View Code

 

5.24

hdu 5701 中位数计数

枚举中位数,然后看区间和为0的区间有多少个(话说这个地方的写法没有遇到过诶..好好学)

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 const int maxn = 1e4+5;
 8 int a[maxn],n,sum[2*maxn];
 9 
10 void solve(){
11     for(int i = 1;i <= n;i++){
12         int cnt = 0;
13         int ans = 0;
14         memset(sum,0,sizeof(sum));
15         sum[maxn]++;
16         for(int j = i-1;j >= 1;j--){
17             if(a[j] < a[i]) cnt--;
18             else cnt++;
19             sum[maxn+cnt]++;
20         }
21         ans += sum[maxn];
22         cnt = 0;
23         for(int j = i+1;j <= n;j++){
24             if(a[j] < a[i]) cnt--;
25             else cnt++;
26             ans += sum[maxn-cnt];
27         }
28 
29         printf("%d",ans);
30         if(i == n) printf("\n");
31         else printf(" ");
32     }
33 }
34 
35 int main(){
36     while(scanf("%d",&n) != EOF){
37         for(int i = 1;i <= n;i++) scanf("%d",&a[i]);
38         solve();
39 
40     }
41     return 0;
42 }
View Code

 

转载于:https://www.cnblogs.com/wuyuewoniu/p/5521461.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值