zoukankan      html  css  js  c++  java
  • day2

    t1

    #include <bits/stdc++.h>
    using namespace std;
    int n,f[1000001];
    int maxn,x,y;
    long long ans;
    int main()
    {
        freopen("stick.in","r",stdin);
        freopen("stick.out","w",stdout);
        scanf("%d",&n);
        maxn=-133;
        for(int i=1,c;i<=n;i++)
        {
            scanf("%d",&c);
            f[c]++;
            maxn=max(maxn,c);
        }
        for(int i=maxn;i>=1;i--)
        {
            if(!f[i])    continue;
            if(f[i]>=4)    {ans+=(long long)i*i;f[i]-=4;i++;continue;}
            if(f[i]+f[i-1]>=4)
            {
                if(f[i]>=2)    {ans+=(long long)i*(i-1);f[i]-=2;f[i-1]=f[i-1]+f[i]-2;continue;}
                else{ans+=(long long)(i-1)*(i-1);f[i-1]-=3;continue;}
            }
            if(!f[i-1])    continue;
            if(i>=3&&f[i-2]&&f[i-1]>=2)
            {            
                ans+=(long long)(i-1)*(i-2);f[i-1]-=2;f[i-2]--;continue;
            }
        }
        cout<<ans;    //longlong 转换 
        return 0;
    }
    //贪心 
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    int b[100001],f[100001],v[100001],cnt,c,n,ans;
    int maxn=-1;
    int main()
    {//输入 
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&c);
            f[c]++;
            maxn=max(maxn,c);
        }
    //统计 
        for(int i=maxn;i>=2;i--)    
            if(f[i]%2&&f[i]!=v[i])
                { f[i]--;f[i-1]++;v[i-1]++; }
        
        for(int i=maxn;i>=2;i--)
            if(f[i]>=2)    {f[i]-=2;b[++cnt]=i;i++;}
    //计算
        sort(b+1,b+cnt+1);
        for(int i=cnt;i>=2;i-=2)    
            ans+=(long long)(i-1)*i;
         cout<<ans;
         return 0 ;
    }

    t2

    #include <bits/stdc++.h>
    using namespace std;
    int n,a[30004],f[30003];
    int l[30004],r[30003];
    int find(int x)
    {
     if(f[x]!=x)
      f[x]=find(f[x]);
     return f[x];
    }
    void bing(int x,int y)//左边是因数

     int f1=find(x),f2=find(y);
     l[f1]=min(l[f2],l[f1]);r[f1]=max(r[f1],r[f2]);
     f[f2] =f1;
     return ;
    }
    int main()//可以达到 2n
    {
     freopen("select.in","r",stdin);
     freopen("select.out","w",stdout);
     scanf("%d",&n);
     for(int i=1;i<=n;i++)
     {
      scanf("%d",&a[i]);
      l[i]=r[i]=i;f[i]=i;
     }
     /*无需并查,搜完直接记录就行,枚举最小值。
     for(int i=1;i<=n;i++)
     {  
      for(int j=i+1;j<=n;j++)
      {   
      int f1=find(i),f2=find(j);
      if(f1==f2) {continue;}
      if((a[f2]%a[f1])==0) {bing(f1,f2);continue;}
      if((a[f1]%a[f2])==0) {bing(f2,f2);continue;}
       j=n;
      }
      for(int j=i-1;j>=1;j--)
      {   
      int f1=find(i),f2=find(j);
      if(f1==f2) {continue;}
      if((a[f2]%a[f1])==0) {bing(f1,f2);continue;}
      if((a[f1]%a[f2])==0) {bing(f2,f2);continue;}
       j=0;
      }
     }
     */
     int len=-1;
     for(int i=1;i<=n;i++)
      len=max(len,r[i]-l[i]+1);
     int sum=0,le[30001];
     for(int i=1;i<=n;i++)
     {
      if((r[i]-l[i]+1)==len)
      {
       sum++;
       le[sum]=l[i];
       i=r[i];
      }
     }
     printf("%d %d",sum,len);
     cout<<endl;
     for(int i=1;i<=sum;i++)
     {
      printf("%d ",le[i]);
     }
     return 0;
    }
    //枚举最小值,枚举倍数位置打标机,


    t3

    #include <bits/stdc++.h>
    using namespace std;
    int l,r,p;
    bool ans[9900000];
    void dfs(int a,int b,int t)//90分 
        if(t>p+1||a>r||b>r)    return;        
        ans[a]=1;
        dfs(a,b+1,t+1);
        dfs(a*b,b,t+1);
        return;
    }
    int main()
    {
        freopen("number.in","r",stdin);
        freopen("number.out","w",stdout);
        scanf("%d%d%d",&l,&r,&p);
        ans[1]=1;
        dfs(1,1,2);
        int t=0;    
        for(int j=l;j<=r;j++)
        if(ans[j])    t++;    
        cout<<t;
        return 0;
    }
    /*分解质因数后,最大指数不超过,50.
    64进制 
    dp
    for(b-——-——)
    f[a*b]=f[a]+1; 

    虽然思路对,只拿了60分

  • 相关阅读:
    HDU4652 Dice
    CF113D Museum / BZOJ3270 博物馆
    SHOI2013 超级跳马
    最基本的卷积与反演
    NOI2014 动物园题解
    SP11414 COT3
    new to do
    linux C++中宏定义的问题:error: unable to find string literal operator ‘operator""fmt’ with ‘const char [4]’, ‘long unsigned int’ arguments
    新装vs2010的问题:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    windows下删除虚拟串口的方法,以及解决串口使用中,无法变更设备串口号的问题
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7190419.html
Copyright © 2011-2022 走看看