• Codeforces Round #174 DIV2


    收获了8个hack,本来排名50+,结果C题没有用long long ,错过了一次绝佳的变紫机会...

    A题:简单题。快速幂水过。

    View Code

    B题:简单题。没看清题目WA了一次。

    View Code
     1 /*
     2 Author:Zhaofa Fang
     3 Lang:C++
     4 */
     5 #include <cstdio>
     6 #include <cstdlib>
     7 #include <sstream>
     8 #include <iostream>
     9 #include <cmath>
    10 #include <cstring>
    11 #include <algorithm>
    12 #include <string>
    13 #include <utility>
    14 #include <vector>
    15 #include <queue>
    16 #include <stack>
    17 #include <map>
    18 #include <set>
    19 using namespace std;
    20 
    21 typedef long long ll;
    22 #define DEBUG(x) cout<< #x << ':' << x << endl
    23 #define REP(i,n) for(int i=0;i < (n);i++)
    24 #define REPD(i,n) for(int i=(n-1);i >= 0;i--)
    25 #define FOR(i,s,t) for(int i = (s);i <= (t);i++)
    26 #define FORD(i,s,t) for(int i = (s);i >= (t);i--)
    27 #define PII pair<int,int>
    28 #define PB push_back
    29 #define MP make_pair
    30 #define ft first
    31 #define sd second
    32 #define lowbit(x) (x&(-x))
    33 #define INF (1<<30)
    34 
    35 
    36 char str[200005];
    37 int main(){
    38     //freopen("in","r",stdin);
    39     //freopen("out","w",stdout);
    40     int n;
    41     while(~scanf("%d",&n)){
    42         scanf("%s",str);
    43         int len = strlen(str);
    44         int cnt = 0;
    45         REP(i,len){
    46             if(str[i] == 'I'){
    47                 cnt++;
    48             }
    49         }
    50         int ans = 0;
    51         if(!cnt)
    52         REP(i,len){
    53             if(str[i] == 'A')ans++;
    54 
    55         }
    56         else if(cnt == 1)ans = 1;
    57         printf("%d\n",ans);
    58     }
    59     return 0;
    60 }

    C题:其实不难,但是long long 和操作1的成段更新卡死了一堆人,用了一个大数据收获8hack。我做法是用线段树来维护,但不用这么复杂也能做。

    线段树
      1 /*
      2 Author:Zhaofa Fang
      3 Lang:C++
      4 */
      5 #include <cstdio>
      6 #include <cstdlib>
      7 #include <sstream>
      8 #include <iostream>
      9 #include <cmath>
     10 #include <cstring>
     11 #include <algorithm>
     12 #include <string>
     13 #include <utility>
     14 #include <vector>
     15 #include <queue>
     16 #include <stack>
     17 #include <map>
     18 #include <set>
     19 using namespace std;
     20 
     21 typedef long long ll;
     22 #define DEBUG(x) cout<< #x << ':' << x << endl
     23 #define REP(i,n) for(int i=0;i < (n);i++)
     24 #define REPD(i,n) for(int i=(n-1);i >= 0;i--)
     25 #define FOR(i,s,t) for(int i = (s);i <= (t);i++)
     26 #define FORD(i,s,t) for(int i = (s);i >= (t);i--)
     27 #define PII pair<int,int>
     28 #define PB push_back
     29 #define MP make_pair
     30 #define ft first
     31 #define sd second
     32 #define lowbit(x) (x&(-x))
     33 #define INF (1<<30)
     34 
     35 #define lson l , m , rt << 1
     36 #define rson m + 1 , r , rt << 1 | 1
     37 
     38 const int maxn = 200011;
     39 ll sum[maxn<<2];
     40 ll add[maxn<<2];
     41 
     42 void PushUp(int rt)
     43 {
     44     sum[rt] = sum[rt<<1] + sum[rt<<1|1];
     45 }
     46 void PushDown(int rt,int m)
     47 {
     48     if(add[rt])
     49     {
     50         add[rt<<1] += add[rt];
     51         add[rt<<1|1] += add[rt];
     52         sum[rt<<1] += add[rt]*(m - (m >> 1));
     53         sum[rt<<1|1] += add[rt]*(m >> 1);
     54         add[rt] = 0;
     55     }
     56 }
     57 
     58 void update(int L,int R,int val,int l,int r,int rt)
     59 {
     60     if(L <= l && r <= R)
     61     {
     62         add[rt] +=val;
     63         sum[rt] += val*(r - l + 1);
     64         return;
     65     }
     66     PushDown(rt , r - l + 1);
     67     int m =(l+r) >> 1;
     68     if(L <= m)update(L,R,val,lson);
     69     if(m < R)update(L,R,val,rson);
     70     PushUp(rt);
     71 }
     72 ll query(int L,int R,int l,int r,int rt)
     73 {
     74     if(L <= l && r <= R)
     75     {
     76         return sum[rt];
     77     }
     78     if(l == r)return 0;
     79     PushDown(rt , r - l + 1);
     80     int m = (l + r) >> 1;
     81     ll ret = 0;
     82     if(L <= m)ret += query(L,R,lson);
     83     if(m<R)ret += query(L,R,rson);
     84     return ret;
     85 }
     86 int main(){
     87     //freopen("in","r",stdin);
     88     //freopen("out","w",stdout);
     89     int n;
     90     stack<int>Q;
     91     scanf("%d",&n);
     92     memset(sum,0,sizeof(sum));
     93     memset(add,0,sizeof(add));
     94     int op,k,a,x;
     95     int len = 1;
     96     ll sum = 0;
     97     REP(i,n){
     98         scanf("%d",&op);
     99         double ans;
    100         if(op == 1){
    101             scanf("%d%d",&a,&x);
    102             update(1,min(a,len),x,1,n,1);
    103         }else if(op == 2){
    104             scanf("%d",&k);
    105             Q.push(k);
    106             len ++;//DEBUG(sum);
    107             sum+=k;
    108         }else {
    109             if(len>=2){
    110                 int tmp = query(len,len,1,n,1);
    111                 update(len,len,-tmp,1,n,1);
    112                 sum -= Q.top();
    113                 Q.pop();len--;
    114             }
    115         }
    116         ans = 1.0*(query(1,len,1,n,1)+sum)/len;
    117         printf("%.6f\n",ans);
    118     }
    119     return 0;
    120 }

     D题:只是a1未知,设状态dp[i][0]为从step2开始的dp值,dp[i][1]则为step3,则有

       dp[i][0] = dp[i+ai][1] + ai;

       dp[i][1] = dp[i-ai][0] + ai;

      记忆化搜素一下,存在环则无解,当a1 = i;答案为dp[i+1][1]+i;

    View Code
     1 /*
     2 Author:Zhaofa Fang
     3 Lang:C++
     4 */
     5 #include <cstdio>
     6 #include <cstdlib>
     7 #include <sstream>
     8 #include <iostream>
     9 #include <cmath>
    10 #include <cstring>
    11 #include <algorithm>
    12 #include <string>
    13 #include <utility>
    14 #include <vector>
    15 #include <queue>
    16 #include <stack>
    17 #include <map>
    18 #include <set>
    19 using namespace std;
    20 
    21 typedef long long ll;
    22 #define DEBUG(x) cout<< #x << ':' << x << endl
    23 #define REP(i,n) for(int i=0;i < (n);i++)
    24 #define REPD(i,n) for(int i=(n-1);i >= 0;i--)
    25 #define FOR(i,s,t) for(int i = (s);i <= (t);i++)
    26 #define FORD(i,s,t) for(int i = (s);i >= (t);i--)
    27 #define PII pair<int,int>
    28 #define PB push_back
    29 #define MP make_pair
    30 #define ft first
    31 #define sd second
    32 #define lowbit(x) (x&(-x))
    33 #define INF (1<<30)
    34 
    35 #define lson l , m , rt << 1
    36 #define rson m + 1 , r , rt << 1 | 1
    37 
    38 const int maxn = 200011;
    39 ll dp[maxn][2],a[maxn];
    40 int n;
    41 bool vist[maxn][2];
    42 ll dfs(int p,int q){
    43     if(p<=0 || p>n)return 0;
    44     if(p == 1)return -1;
    45     if(vist[p][q])return dp[p][q];
    46     vist[p][q] = 1;
    47     int tmp1;
    48     if(!q)tmp1 = p + a[p];
    49     else tmp1 = p - a[p];
    50     ll tmp2 = dfs(tmp1,q^1);
    51     if(tmp2 == -1)dp[p][q] = -1;
    52     else dp[p][q] = tmp2 + a[p];
    53     return dp[p][q];
    54 }
    55 
    56 int main(){
    57     //freopen("in","r",stdin);
    58     //freopen("out","w",stdout);
    59     memset(dp,-1,sizeof(dp));
    60     scanf("%d",&n);
    61     FOR(i,2,n)scanf("%I64d",a+i);
    62     FOR(i,2,n){
    63         if(!vist[i][0])dfs(i,0);
    64         if(!vist[i][1])dfs(i,1);
    65     }
    66     FOR(i,1,n-1)
    67         if(dp[i+1][1] == -1)puts("-1");
    68         else printf("%I64d\n",dp[i+1][1]+i);
    69     return 0;
    70 }
    by Farmer
  • 相关阅读:
    zabbix api
    cassandra学习笔记
    loki grafana
    logstash配置 filebeat配置
    k8s prometheus api
    51cto 先超Prometheus+Grafana监控告警系统实战
    51cto 张岩峰 Prometheus企业级监控系统:零基础入门
    imooc 使用Prometheus实践基于Spring Boot监控告警体系 笔记
    python3 django migrate
    python3虚拟环境
  • 原文地址:https://www.cnblogs.com/fzf123/p/2965568.html
Copyright © 2020-2023  润新知