日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NYOJ 题目528 找球号(三)

發布時間:2025/3/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 题目528 找球号(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

找球號(三)

時間限制:2000?ms ?|? 內存限制:3000?KB 難度:2 描述

xiaod現在正在某個球場負責網球的管理工作。為了方便管理,他把每個球都編了號,且每個編號的球的總個數都是偶數。有一天,xiaod發現少了一個球,你能幫他找出丟的那個球的球號嗎?

輸入
有多組測試數據。每組數據包括兩行。
第一行是一個整數N(0<N<1000000),表示現在所剩的球數。
隨后的一行是N個數,表示所剩的各個球的編號M(0<M<10^9)。
輸出
對于每組數據,輸出弄丟的那個球的球號。
樣例輸入
5 1 1 3 6 6 3 1 2 1

樣例輸出

3 2 ? ? ? 一開始沒有注意內存限制,直接開了一個數組,用數組下標記錄球號,最后查詢時用a[i]對2取余,余數為1時,輸出 i 即可。提交以后才發現超內存了。

超內存的代碼:

#include<stdio.h> #include<string.h> int a[1000002]; int main() {int n,i,m,max;while(~scanf("%d",&n)){memset(a,0,sizeof(a));max=0;for(i=0;i<n;i++){scanf("%d",&m);a[m]++;if(m>max)max=m;}for(i=1;i<=max;i++)if(a[i]&1){printf("%d\n",i);break;}}return 0; }

后來聽人說可以用異或的性質來處理,就查了一下異或的性質,寫好代碼提交上就AC了。

異或的運算規則: 0^0=0, 0^1=1,1^0=1,1^1=0

具體就是先將十進制數轉化為二進制數(取8位或16位,不足補0),然后每一位對應異或運算,把結果轉化為十進制數就是異或后的結果。如9^5=12;

00001001 ?(9的二進制表示)

00000101 ? (5的二進制表示)

00001100 ? (異或后的結果,用十進制表示就是12)

具體代碼如下:

#include<stdio.h> int main() {int n,m,i,s;while(~scanf("%d",&n)){s=0;for(i=0;i<n;i++){scanf("%d",&m);s^=m;}printf("%d\n",s);}return 0; }

另一種方法就是用C++里的容器處理,我看別人這樣寫的,做個參考。具體代碼如下:

#include<stdio.h> #include<set> using namespace std; int main() {int n,a,b,i;set<int> T; //定義一個int型容器while(scanf("%d",&n)!=EOF){b=0;for(i=0;i<n;i++){scanf("%d",&a);if(T.find(a)==T.end()) T.insert(a);//容器中無與a相同的,插入aelse T.erase(a); //找到與a相同的,刪除所有的a}printf("%d\n",*T.begin());T.clear();//清空容器}return 0; }




總結

以上是生活随笔為你收集整理的NYOJ 题目528 找球号(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。