标签:string 科学 alt 需要 signed fine queue cst false
当一个数过大时存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 ‘\n‘ #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; }
标签:string 科学 alt 需要 signed fine queue cst false
原文地址:https://www.cnblogs.com/waryan/p/12684522.html