zoukankan      html  css  js  c++  java
  • AIM Tech Round 3 (Div. 2)

    A题,读错题意,坑了好久,大于d的橘子不用加,每次总和大于b之后就要清空,然后答案加1

    #include<bits/stdc++.h>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define pii pair<int,int>
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=100000+10,maxn=1000000+10,inf=0x3f3f3f;
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n,b,d,ans=0,sum=0;
        cin>>n>>b>>d;
        for(int i=0;i<n;i++)
        {
            int a;
            cin>>a;
            if(a>b)continue;
            sum+=a;
            if(sum>d)sum=0,ans++;
        }
        cout<<ans<<endl;
        return 0;
    }
    /********************
    
    ********************/
    A

    B题,先判断初始点是不是在最左边(或最右边)这样直接一次走到第n-1(2)个就行了,再判断从左(右)边走到最右边-1,从右(左)边走到最左边-1的最小值就好了

    #include<bits/stdc++.h>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define pii pair<int,int>
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=100000+10,maxn=1000000+10,inf=0x3f3f3f;
    
    int a[N];
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n,k;
        cin>>n>>k;
        for(int i=1;i<=n;i++)cin>>a[i];
        if(n==1)
        {
            cout<<0<<endl;
            return 0;
        }
        sort(a+1,a+1+n);
        if(k<=a[1])
        {
            cout<<a[n-1]-k<<endl;
            return 0;
        }
        if(k>=a[n])
        {
            cout<<k-a[2]<<endl;
            return 0;
        }
        int ans=min(min(abs(k-a[2]),abs(k-a[n]))+abs(a[2]-a[n]),min(abs(k-a[n-1]),abs(k-a[1]))+abs(a[n-1]-a[1]));
        cout<<ans<<endl;
        return 0;
    }
    /********************
    
    ********************/
    B

    C题,从第一次出现不是a的开始,一直更新到出现a为止,注意特判全是a的情况

    #include<bits/stdc++.h>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define pii pair<int,int>
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=100000+10,maxn=1000000+10,inf=0x3f3f3f;
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        string s;
        cin>>s;
        int i=0;
        while(i<s.size())
        {
            if(s[i]=='a')i++;
            else break;
        }
        if(i==s.size())
        {
            cout<<s.substr(0,s.size()-1)+'z'<<endl;
            return 0;
        }
        while(i<s.size())
        {
            if(s[i]!='a')s[i]--,i++;
            else break;
        }
        cout<<s<<endl;
        return 0;
    }
    /********************
    
    ********************/
    C

    D题,特判b==0,c==0,a==0或d==0的情况,如果不能找到对应00,11的值就输出impossible,可以先预处理打个表,此时1的个数*0的个数一定等于b+c

    把0尽可能放在最左边,和最右边,直到b<1的个数,c<1的个数而且b+c==1的个数,最后遍历一边找出现b次1的位置放0就好了

    #include<bits/stdc++.h>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define pii pair<int,int>
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=100000+10,maxn=1000000+10,inf=0x3f3f3f;
    
    map<ll,ll>ans;
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        for(ll i=1;i<=1e5;i++)ans[i*(i-1)/2]=i;
        ll a,b,c,d;
        cin>>a>>b>>c>>d;
        if(a==0&&b==0&&c==0&&d==0)
        {
            cout<<"0"<<endl;
            return 0;
        }
        ll aa=ans[a],dd=ans[d];
        if(ans[a]==0||ans[d]==0)
        {
            cout<<"Impossible"<<endl;
            return 0;
        }
        if(b==0&&c==0)
        {
            if(a==0&&d!=0)cout<<string(dd,'1')<<endl;
            else if(a!=0&&d==0)cout<<string(aa,'0')<<endl;
            else if(a!=0&&d!=0)cout<<"Impossible"<<endl;
            return 0;
        }
        if(aa*dd!=c+b)
        {
            cout<<"Impossible"<<endl;
            return 0;
        }
        string s=string(dd,'1');
        int p=b/dd;
        b-=p*dd;
        s=string(p,'0')+s;
        p=c/dd;
        c-=p*dd;
        s=s+string(p,'0');
        if(c==0&&b==0)
        {
            cout<<s<<endl;
            return 0;
        }
        int one=0;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='1')one++;
            if(one==c)
            {
              //  cout<<i<<endl;
                s=s.substr(0,i+1)+'0'+s.substr(i+1,s.size());
                break;
            }
        }
        cout<<s<<endl;
        return 0;
    }
    /********************
    1 2 2 1
    ans[2]=1,
    ********************/
    D
  • 相关阅读:
    C#一些定义
    顺序
    针对IE8的css hack
    js 数字,金额 用逗号 隔开。数字格式化
    Ubuntu下使用Vi是方向键变乱码 退格键不能使用的解决方法
    UBUNTU中如何获得root权限
    区分IE8 、IE9 的专属css hack
    ubuntu 安装 Sublime Text 2
    PHP执行zip与rar解压缩方法
    使用ThinkPHP时,双引号导致插入数据库经过转义的处理
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/7413598.html
Copyright © 2011-2022 走看看