NYOJ-备用2350 彩排(位运算)
題目:
2350: 彩排
時間限制:?1 秒??內(nèi)存限制:?2 MB提交:?179??解決:?54
提交?狀態(tài)?
題目描述
南陽理工學(xué)院,舉辦運動會,有N個人來自不同的學(xué)院,在站隊伍的時候每一排需要站K個人,并且這一排的人需要來自同一個學(xué)院,但是現(xiàn)在其中有一個學(xué)院的人數(shù)不是K的倍數(shù)導(dǎo)致他們不能滿足一排的都是同一個學(xué)院的,所以我們想找出他是哪個學(xué)院的;輸入
多組測試數(shù)據(jù);
輸入一個n,k;
代表有n個人,每一排站k人;
接下來輸入n個數(shù)字代表學(xué)院編號,a1,a2...an-1,an ?
ai代表我來自的學(xué)院,數(shù)字相同表示來自相同的學(xué)院。數(shù)字不同代表來自不同的學(xué)院。
輸出
輸出一個整數(shù),代表人數(shù)不滿足條件的學(xué)院編號;
樣例輸入
3 2 1 1 3 10 3 3 9 3 1 1 3 1 3 9 9樣例輸出
3 3提示
0<n,k≤1000000;?0<ai≤1e9;?請注意內(nèi)存限制 (數(shù)據(jù)保證合法)?
來源
Practice-Round#2
思路:這個題,統(tǒng)計每個學(xué)校的人數(shù),輸出不能被K整除的那個,簡單說?統(tǒng)計數(shù)字出現(xiàn)次數(shù),輸出不能被K整除的數(shù)字。用二進制統(tǒng)計一下。將每個數(shù)轉(zhuǎn)化為二進制,用一個數(shù)組統(tǒng)計二進制每位1出現(xiàn)的次數(shù),按位統(tǒng)計1的個數(shù)。我們可以假設(shè),剛好能夠被K整除?,則每一個二進制位的?1?的個數(shù)都能夠被K整除,若加上一個任意的數(shù)字則,則它會使得他二進制位1所在的不能夠被K整除。所以只需要轉(zhuǎn)化為二進制統(tǒng)計每個位置上1出現(xiàn)的次數(shù),再對K取模
代碼:
#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <string> #include <iostream> #include <stack> #include <queue> #include <vector> #include <algorithm> #define mem(a,b) memset(a,b,sizeof(a)) #define N 100000+10 #define M 10000+20 #define MOD 1000000000+7 #define inf 0x3f3f3f3f #define ll long long using namespace std; int a[32]; int main() {int n,m,x;while(~scanf("%d%d",&n,&m)){mem(a,0);int t=n;while(t--){scanf("%d",&x);int i=0;while(x){a[i]=a[i]+x%2;x/=2;i++;}}int ans=0;for(int i=0; i<32; i++)if(a[i]%m)ans=(ans|(1<<i));printf("%d\n",ans);}return 0; }
總結(jié)
以上是生活随笔為你收集整理的NYOJ-备用2350 彩排(位运算)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [附源码]Java计算机毕业设计SSM个
- 下一篇: Java之构造函数