• 2020 Multi-University Training Contest 3 1004 Tokitsukaze and Multiple


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6794

    题意:给你n个数以及一个特殊数k,你可以将任意两个连续的数合并成一个新的数,同时数组的长度-1,问你进行若干次操作后(可以为0次),最多有多少个数是k的倍数。

    思路:遍历数组,定义sum记录其和,如果a[i]是k的倍数,则答案++,并把sum归0,否则sum=(sum+a[i])%k;如果sum==0,那答案++,否则的话看之前sum有没有出现过,有的话答案++;

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    int a[200005];
    int b[100005],c[200005];
    void fun(int h)
    {
        for(int i=1;i<=h;i++)
            b[c[i]]=0;
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            memset(b,0,sizeof(b));
            int n,k;
            cin>>n>>k;
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                a[i]%=k;//先把a[i]%个k
            }
            int ans=0,sum=0;
            int h=0;
            for(int i=1;i<=n;i++)
            {
                if(a[i]==0)//a[i]是k的倍数,ans++,并把b数组归0
                {
                    ans++;
                    sum=0;
                    fun(h);
                    h=0;
                    continue;
                }
                sum=(sum+a[i])%k;
                if(sum==0)//前几个的和是k的倍数,ans++,把b数组归0
                {
                    ans++;
                    fun(h);
                    h=0;
                    continue;
                }
                if(b[sum]==1)//sum在之前来过,看中间一段的和是k的倍数,ans++,b数组归0
                {
                    ans++;
                    sum=0;
                    fun(h);
                    h=0;
                    continue;
                }
                b[sum]=1;//记录sum以及来过
                c[++h]=sum;
            }
            cout<<ans<<endl;
        }
    }
    

      

  • 相关阅读:
    分布式事物的解决方法
    bootstrap的其他
    bootstrap表单控件
    多线程编程
    内存管理技术
    PrintWriter用法简析
    JSP内置对象
    Servlet学习应该注意的几点
    GPU渲染管线概述
    再说AutoComplete
  • 原文地址:https://www.cnblogs.com/zcb123456789/p/13399423.html
Copyright © 2020-2023  润新知