codeforce 224

来源:互联网 发布:wps数据透视图怎么做 编辑:程序博客网 时间:2024/04/27 14:41

好久没写csdn的博客了,自从今年的亚洲赛完就一直没有敲过有关算法方面的程序,发现现在都有点生疏了。昨天参加了场CF,惨败。。。

第一题,水贪心,没仔细读题,结果当成是博弈DP,敲完果断贡献了个WA。

第二题,水题,把数存数组里排序,左右扫一遍就OK了。

第三题,一直题意没弄明白,后来问了学妹题意,是个递归二分,开始敲代码,还算比较顺利,结果MLE了,数爆int了,结果就跪了。后来改long long 果断过了。

第四题,没看。

第五题,感觉是离线数据结构查询,不过没想太明白也没太多时间就没动,今天看了下,完全是可以做的。

开始没多久,中途断网近半小时,顿时好无语,加上不熟,果断时间不够,给跪了。

第三题,代码

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <map>#define LL long longusing namespace std;const int mm = 1e5+9;//map<LL,LL>mp;class ppp{public:  LL l,r;  LL typ;  LL a,b;}f[mm];int n;LL query(LL x){  LL l = 0,r = n-1,mid;  while(l<=r)  {    mid = (l+r)/2;    if(f[mid].l<=x && f[mid].r>=x)    {      if(f[mid].typ == 1)        return f[mid].a;//mp[x];      else      {        int num = x-f[mid].l+1;        num = num%f[mid].a;        if(num == 0)          num = f[mid].a;        return query(num);      }    }    else if(f[mid].l>x)    {      r = mid -1;    }    else if(f[mid].r<x)    {      l = mid + 1;    }  }}int main(){    while(~scanf("%d",&n))    {//      mp.clear();      LL kai = 1;      for(int i=0;i<n;++i)      {        int typ,a,b;        scanf("%d",&typ);        if(typ == 1)        {          scanf("%d",&a);          f[i].l = kai; f[i].r = kai;          f[i].a = a;          f[i].typ = typ;//          mp[kai] = a;          ++kai;        }        else        {          scanf("%d%d",&a,&b);          f[i].l = kai; f[i].r = kai + (LL)a*b-1;          kai = f[i].r + 1;          f[i].typ = typ;          f[i].a = a; f[i].b = b;        }      }//      for(int i=0;i<n;++i)//      {//        printf("%d %d %d %d\n",f[i].l,f[i].r,f[i].a,f[i].b);//      }      int m;      LL qu;      scanf("%d",&m);      for(int i=0;i<m;++i)      {        scanf("%I64d",&qu);        printf("%I64d ",query(qu));      }      printf("\n");    }    return 0;}

第四题

#include <iostream>#include <cstdio>#include <set>#include <cstring>#include <map>#include <string>#include <vector>#include <algorithm>#include <cmath>#include <queue>#define VI vector<int>#define PB push_back#define ll(x) (1<<x)#define FOR(i,a,b) for(int i=a;i<=b;++i)#define DWN(i,a,b) for(int i=a;i>=b;--i)#define clr(f,z) memset(f,z,sizeof(f))using namespace std;const int mm = 7009;int d[mm*311],l[mm],r[mm],x[mm],vis[mm*311];VI level[mm];int main(){    d[0] = 0;    FOR(i,1,111*mm-1)///i 对应右下一层的值    {        d[i] = d[i-1] + 1;        if( (i&(i-1)) == 0)            ++d[i];    }    int n,m;    while(cin>>n>>m)    {        int res = 0,typ,id;        clr(vis,0);        FOR(i,0,mm-1)        level[i].clear();            FOR(i,1,m)            {                cin>>typ;                if(typ == 1)                {                    cin>>id>>l[i]>>r[i]>>x[i];                    level[id].PB(i);                }                else                {                    int t,v,ll,rr,ans;                    cin>>t>>v;//                    puts("uuu");                    ++res; ans = 0;                    ll = rr = v;                    FOR(j,t,n)                       {                           int len = level[j].size()-1;//                        FOR(k,0,level[j].size()-1) //BUG                        FOR(k,0,len)                        if(ll>r[ level[j][k] ] || rr < l[ level[j][k] ])                             continue;                        else                        {                            if(vis[ x[ level[j][k] ] ] != res)                            {                                vis[ x[ level[j][k] ] ] = res;                                ++ans;                            }                        }                         ll = d[ll-1] + 1;                         rr = d[rr];                       }                    cout<<ans<<endl;                }            }    }    return 0;}/**4 51 4 4 7 11 3 1 2 22 1 12 4 12 3 3*/


第五题:

//在线线段树 265 MS#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<queue>#include<set>#include<vector>#include<string>#include<algorithm>#define lson (t<<1)#define rson (t<<1|1)#define FOR(i,a,b) for(int i=a;i<=b;++i)#define DWN(i,a,b) for(int i=a;i>=b;--i)#define clr(f,z) memset(f,z,sizeof(f))#define ll(x) (1<<x)using namespace std;const int mm = 1e6+9;char bracket[mm];class Segment{public:  int l,r,len,lbracket,rbracket;}rt[mm*4];void push(int t){  int num = min(rt[lson].lbracket,rt[rson].rbracket);  rt[t].len = rt[lson].len + rt[rson].len + num;  rt[t].lbracket = rt[lson].lbracket + rt[rson].lbracket - num;  rt[t].rbracket = rt[lson].rbracket + rt[rson].rbracket - num;}void build(int t,int l,int r){  rt[t].l = l; rt[t].r = r;  if(l == r)  {    rt[t].len = 0;    rt[t].lbracket = rt[t].rbracket = 0;    if(bracket[l-1] == '(')        rt[t].lbracket++;    else rt[t].rbracket++;    return ;  }  int mid = (l+r)/2;  build(lson,l,mid); build(rson,mid+1,r);  push(t);}Segment query(int t,int l,int r){    if(rt[t].l >= l && rt[t].r <= r)      {        return rt[t];      }    Segment ret = rt[t];    ret.lbracket = 0;    ret.rbracket = 0;    ret.len = 0;    if(rt[t].r < l || rt[t].l > r)      return ret;    else    {      Segment la = query(lson,l,r);      Segment ra = query(rson,l,r);      int num = min(la.lbracket,ra.rbracket);      ret.len = la.len + ra.len + num;      ret.lbracket = la.lbracket + ra.lbracket - num;      ret.rbracket = la.rbracket + ra.rbracket - num;      return ret;    }}int main(){    while(~scanf("%s",bracket))    {        int len = strlen(bracket);        build(1,1,len);        int m,a,b;        scanf("%d",&m);        FOR(i,1,m)        {          scanf("%d%d",&a,&b);          printf("%d\n",query(1,a,b).len*2);        }    }  return 0;}/////右离线版 93MS//#include<cstdio>//#include<cstring>//#include<iostream>//#include<cmath>//#include<queue>//#include<set>//#include<vector>//#include<string>//#include<stack>//#include<algorithm>//#define PII pair<int,int>//#define FOR(i,a,b) for(int i=a;i<=b;++i)//#define DWN(i,a,b) for(int i=a;i>=b;--i)//#define clr(f,z) memset(f,z,sizeof(f))//#define ll(x) (1<<x)////using namespace std;//const int mm = 1e6+9;//char bracket[mm];//int sum[mm];////int lowbit(const int x)//{//  return x&(-x);//}////void add(int*sum,int pos,const int num)//{//    for(int i=pos;i<mm;i+=lowbit(i))//    {//      sum[i] += num;//    }//}////int query(int*sum,const int pos)//{//    int ans = 0;//    for(int i=pos;i>0;i-=lowbit(i))//      ans += sum[i];//    return ans;//}//stack<int>st;//vector<PII>q[mm];//int ans[mm];//int main()//{////    while(~scanf("%s",bracket))//    {//        int m,a,b;//        scanf("%d",&m);//        FOR(i,1,m)//        {//          scanf("%d%d",&a,&b);//          --a; --b;//          q[a].push_back(PII(b,i));//        }//        int len = strlen(bracket);//        clr(sum,0);//        DWN(i,len-1,0)//        {//          if(bracket[i] == ')')//            st.push(i);//          else//          {//            if(!st.empty())//            {//              add(sum,st.top(),1);//              st.pop();//            }//          }//          for(int j = 0;j<q[i].size();++j)//          {//            ans[ q[i][j].second ] = query(sum,q[i][j].first);//          }//        }//      FOR(i,1,m)//      printf("%d\n",ans[i]+ans[i]);//    }//  return 0;//}



0 0
原创粉丝点击