• contest 1.13


    A.发财兔1A

    O(nlogn)

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<map>
    typedef long long ll;
    using namespace std;
     
    ll n,num;
    ll a[1000005];
    ll b[1000005];
    ll cnt[1000005];
     
    ll getid(ll x){
      return lower_bound(b+1,b+1+num,x)-b;
    }
     
    int main()
    {
        scanf("%lld",&n);
        for(ll i=1;i<=n;i++){
            scanf("%lld",&a[i]);
            b[i]=a[i];
        }
        sort(a+1,a+1+n);
        sort(b+1,b+1+n);
        num=unique(b+1,b+1+n)-(b+1);
        for(ll i=1;i<=n;i++){
            ll id=getid(a[i]);
            cnt[id]++;
        }
        ll ans=0;
        for(ll i=1;i<=n;i++){
            ll now=1;
            while(now<=2*a[n]){
                if(now<a[i]||now-a[i]<a[i]) {now*=2;continue;}
                ll id=getid(now-a[i]);
                if(b[id]==now-a[i]){
                  ans+=cnt[id];
                  if(now-a[i]==a[i]) {ans--;cnt[getid(a[i])]--;}
                }
                now*=2;
            }
        }
        printf("%lld
    ",ans);
        return 0;
    }
     
    View Code

    C.发财兔1C

    树状数组+前缀和差分

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<map>
    #define lowbit(x) x&(-x)
    typedef long long ll;
    using namespace std;
    
    int n,m;
    int a[1000005],A[1000005];
    ll c[1000005];
    map<int,int> last;
    
    struct Query{
      int l,r,id;
      ll ans;
    }q[1000005];
    
    bool cmp1(Query a,Query b){
      return a.r<b.r;
    }
    
    bool cmp2(Query a,Query b){
      return a.id<b.id;
    }
    
    void add(int pos,int val){
      for(int i=pos;i<=n;i+=lowbit(i)) c[i]^=val;
    }
    
    ll getsum(int pos){
      ll ret=0;
      for(int i=pos;i>0;i-=lowbit(i)) ret^=c[i];
      return ret;
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            A[i]=A[i-1]^a[i];
        }
        for(int i=1;i<=m;i++){
            scanf("%d%d",&q[i].l,&q[i].r);
            q[i].id=i;
        }
        sort(q+1,q+1+m,cmp1);
        int now=1;
        for(int i=1;i<=n;i++){
            if(last[a[i]]) add(last[a[i]],a[i]);
            last[a[i]]=i;
            add(i,a[i]);
            while(now<=m&&q[now].r<=i){
                int l=q[now].l,r=q[now].r;
                q[now].ans=(A[r]^A[l-1])^(getsum(r)^getsum(l-1));
                now++;
            }
        }
        sort(q+1,q+1+m,cmp2);
        for(int i=1;i<=m;i++){
            printf("%lld
    ",q[i].ans);
        }
        return 0;
    }
    View Code

    E.bomb

    暴力

    #include <iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #include<map>
    #define inf 0x3f3f3f3f
    using namespace std;
     
    map<double,int> mp;
     
    struct Node{
      int x,y;
    }node[1205];
     
    double getk(Node a,Node b){
      double x=a.x-b.x;
      double y=a.y-b.y;
      if(y==0) return 0;
      else if(x==0) return inf;
      else return y*1.0/(x*1.0);
    }
     
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d%d",&node[i].x,&node[i].y);
        }
        int ans=1;
        for(int i=1;i<=n;i++){
            int cnt=1;
            mp.clear();
            for(int j=1;j<=n;j++){
                if(j==i) continue;
                double k=getk(node[i],node[j]);
                mp[k]++;
                cnt=max(cnt,mp[k]+1);
            }
            ans=max(ans,cnt);
        }
        printf("%d
    ",ans);
        return 0;
    }
     
    View Code

    F.matrix

    预处理+枚举

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    char Map[5005][5005];
    int cnt[5005][5005];
    int vis[5005];
    
    int main()
    {
        int n,m;scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            scanf("%s",Map[i]+1);
        }
        for(int i=1;i<=n;i++){
            for(int j=m;j>=1;j--){
                if(Map[i][j]=='0') cnt[i][j]=0;
                else cnt[i][j]=cnt[i][j+1]+1;
                //printf("%d
    ",cnt[i][j]);
            }
        }
        int ans=0;
        for(int i=1;i<=m;i++){
            memset(vis,0,sizeof(vis));
            for(int j=1;j<=n;j++){
                vis[cnt[j][i]]++;
            }
            int all=0;
            for(int j=n;j>=1;j--){
                all+=vis[j];
                ans=max(ans,j*all);
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
    View Code
    转载请注明出处:https://www.cnblogs.com/lllxq/
  • 相关阅读:
    Solr7.2.1环境搭建和配置ik中文分词器
    LayUI table表格控件 如何显示 对象中的属性(针对Mybatis的级联查询--一对一情况)
    ajax传数组到后台,后台springmvc接收数组参数
    springMVC访问根路径问题
    SpringMVC拦截器(资源和权限管理)
    jquery ajax post请求实例
    SpringMVC对日期类型的转换
    SpringMVC数据绑定四(自定义的类型转换器)
    SpringMVC数据绑定三(JSON 、XML))
    SpringMVC数据绑定二(List、Set和Map类型)
  • 原文地址:https://www.cnblogs.com/lllxq/p/10263221.html
Copyright © 2020-2023  润新知