计蒜客-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处理位运算问题)