计蒜客-T1271 完美K倍子数组

Posted waryan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜客-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;
}

 

  

 

 

 

以上是关于计蒜客-T1271 完美K倍子数组的主要内容,如果未能解决你的问题,请参考以下文章

计蒜客15430 XOR Queries(Trie处理位运算问题)

计蒜客模拟赛D1T1 蒜头君打地鼠:矩阵旋转+二维前缀和

计蒜客 31452 - Supreme Number - [简单数学][2018ICPC沈阳网络预赛K题]

计蒜客 - Fantastic Graph

●计蒜客 百度地图的实时路况

计蒜客 31001 - Magical Girl Haze - [最短路][2018ICPC南京网络预赛L题]