zoukankan      html  css  js  c++  java
  • 计蒜客-T1271 完美K倍子数组

    完美K倍子数组

    错误原因:

      当一个数过大时存map时需要考虑的时候将其取余然后在输入的时候就遍历掉,单独遍历map是不科学的

    思路:

      1.k的倍数类

      2.非k的倍数但是两个数加起来是k的倍数比如2k+3和3k+(k-3)

      3.对k取余后是k的一半

    #include <iostream>
    #include<algorithm>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <queue>
    #include<map>
    #include<set>
    #include<sstream>
    #define endl '
    '
    #define INF 0x3f3f3f3f
    #define DOF 0x7f7f7f7f
    #define mem(a,b) memset(a,b,sizeof(a));
    #define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    typedef long long ll;
    using namespace std;
    const int maxn=1e5+10;
    map<unsigned int,unsigned int>mt;
    int main()
    {
        unsigned int n,k,tmp;cin>>n>>k;
        unsigned cnt1=0,cnt2=0,flag=0;
        for(unsigned int i=0;i<n;++i){
            cin>>tmp;
            int t=tmp%k;
            if(t==0) ++cnt1;
            else if(2*t%k==0) ++cnt2;
            else if(!flag){
                mt[t]=1;
                if(mt[k-t]) flag=1;
            }
        }
        unsigned int ans=0;
        if(cnt1==1) cnt1=0;
        if(cnt2==1) cnt2=0;
        ans=max(cnt1,cnt2);
        if(ans==0&&!flag) cout<<-1<<endl;
        else if(ans!=0) cout<<ans<<endl;
        else cout<<2<<endl;
    }

      

  • 相关阅读:
    Android studio USB连接失败
    BZOJ 1013 [JSOI2008]球形空间产生器sphere
    UVA1025
    noip2016天天爱跑步
    noip2015运输计划
    noip2012借教室
    BZOJ 1597: [Usaco2008 Mar]土地购买
    BZOJ1010: [HNOI2008]玩具装箱toy
    BZOJ1026: [SCOI2009]windy数
    BZOJ1801:[Ahoi2009]chess 中国象棋
  • 原文地址:https://www.cnblogs.com/waryan/p/12684522.html
Copyright © 2011-2022 走看看