ZeroJudge - b050: 1. 集合運算 解題心得

(function(w,d,s,l,i)w[l]=w[l])(window,document,'script','dataLayer','GTM-KDKMGT');
(function(d, s, id) var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/zh_TW/all.js#xfbml=1&appId=668497826514848"; fjs.parentNode.insertBefore(js, fjs); (document, 'script', 'facebook-jssdk'));






if(BAHAID)
BAHAID = BAHAID.replace(/&/g, "&")
.replace(/, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");

BAHAIDlow = BAHAID.toLowerCase();

document.write('');

document.write('

');
document.write('');
document.write('');
document.write('');
document.write('

');

//document.write('
');
document.write('
');
document.write('
');
document.write('
');
document.write('
');
document.write('
');
document.write('
');
document.write('
');


else
document.write('
');
document.write('');
document.write('
    ');
    document.write('
  • 我要登入
  • ');
    document.write('
  • 註冊
  • ');
    document.write('
  • ');
    document.write('
');
document.write('
');


document.write('
');

document.write(' ');

(function()
var cx = 'partner-pub-9012069346306566:kd3hd85io9c';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
)();

service = new rsearch('rsearch');

if( BAHAID )
NOTIFY_getnum();
run30 = setInterval("NOTIFY_getnum()",60000);


function insideSecondaryfunc(frm, evt){
if( 0

















breadCrumbs(122, '', 'homeuid=inversion')








    breadCrumbs_listMenu(122, 0, 'homeuid=inversion')





    創作內容





    0 GP


    ZeroJudge - b050: 1. 集合運算 解題心得


    作者:Not In My Back Yard│2018-10-12 19:25:18│贊助:0│人氣:9

    題目連結:

    b050: 1. 集合運算





    題目大意:

    給定一正整數N,代表接下來有N行。每行代表一個集合(從A開始編號)的內容。



    並定義:

    A+B,為A與B的聯集。

    A * B,為A與B的交集。

    A-B,為A與B的差集。

    A>=B,代表A包含B。



    求這N個集合彼此依序做上述集合運算的結果,意義重複的不用再做一次。



    而N=0,請結束程式,不用對這行做任何處理。



    註:原題就沒有給N的範圍,甚至還沒有給「意義重複的不用再做」(但要注意,儘管本人照此AC了,但其實只是本人的擅自臆測)。







    範例輸入:

    2

    abcdef

    cfehi

    2

    34abcef

    34

    0







    範例輸出:

    Test Case 1:

    A: abcdef

    B: cefhi

    A+B: abcdefhi

    A*B: cef

    A-B: abd

    B-A: hi

    A does not contain B

    B does not contain A

    Test Case 2:

    A: 34abcef

    B: 34

    A+B: 34abcef

    A*B: 34

    A-B: abcef

    B-A:

    A contains B

    B does not contain A







    解題思維:

    這題可以用C++內建的「set」直接下去做。但是本人還是自己寫了一個類別。



    本人的做法是:

    在類別裡面宣告一個bool陣列,用以儲存相應位置的字元有無出現。



    例:48在ascii裡面代表「0」這個字元,如果有出現「0」,就把bool陣列的第48個位置設為true。就算多次出現「0」,也只會當作出現一次(跟數學的集合一樣)。



    然後各自定義 +、* 、- 和 >= 四個運算子,分別代表聯集、合集、差集和包含。



    聯集的情況,就只是把兩者的bool陣列重疊在一起。



    合集則是,要把兩者皆有的元素抓出來。



    差集就是,自己有的,而對方(第二個運算元,像是A-B的B)沒有。



    最後的包含,只要看對方所擁有的元素是否自己都有。



    然後,多個集合的運算順序,本人是依照以下(以N=3為例):

    A+B

    A+C

    B+C

    A-B

    A * B

    A * C

    B * C

    A-B

    A-C

    B-A

    B-C

    C-A

    C-B

    A>=B

    A>=C

    B>=A

    B>=C

    C>=A

    C>=B



    以此類推。簡單來說就是,做起來結果會一樣的就不用做了,然後按照字典序(A先,B則後等等)。








    本人的程式碼(放在CodePile)


    此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。






    喜歡0
    收藏
    0
    引用
    0
    留言
    推上首頁



    檢舉








    引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4159821

    All rights reserved. 版權所有,保留一切權利





    相關創作

    同標籤作品搜尋:程式題目解題心得|模擬





    ZeroJudge - d586: 哈密瓜美語 解題心得




    ZeroJudge - d681: BinaryCount 解題心得




    ZeroJudge - d018: 字串讀取練習 解題心得




    ZeroJudge - c299: 1. 連號或不連號 解題心得




    ZeroJudge - d708: 小王的積木 解題心得


    留言共 0 篇留言




    Util.ChangeText('replys', Util.ChangeText.FLAG_LAZYLOAD|Util.ChangeText.FLAG_MAX_SIZE|Util.ChangeText.FLAG_BALA_PLAYER);

    我要留言提醒:您尚未登入,請先登入再留言


    0喜歡★inversion 可決定是否刪除您的留言,請勿發表違反站規文字。



    前一篇:ZeroJudge - ...

    後一篇:ZeroJudge - ...








    egg('.MSG-list8C img').each(function(elem)
    elem.className = elem.className + ' lazyload';
    );

    egg('.gallery-image').imageGallery();

    function deleteCreation(vCode)
    var content = egg('.MSG-list8C').html();
    var pattern = /]*?>/i;
    var html = '
    確定要刪除嗎?';
    var width = '200px';
    if(content.match(pattern))
    html += '
    ';

    var boxConfig =
    'closeButton': false,
    'css':
    'width': width

    ;

    egg.mutbox(html, '訊息',
    '確定': function()
    if(egg('#chkDelTruthImage:checked').size())
    egg('[name=delTruthImage]').val('yes');


    egg.cookie.del('ckHOME_CREATION','home.gamer.com.tw','/');
    egg.cookie.set('ckHOME_CREATION',vCode,'home.gamer.com.tw','/');
    document.getElementById('frmDel').submit();
    egg.lightbox.close();
    ,
    '取消': function()
    egg.lightbox.close();

    ,boxConfig);

    var buttonOk = egg('.BH-popbtns :button:eq(0)');
    if(buttonOk.size())
    buttonOk.get(0).focus();



    resizeImage(627);

    egg('.btnGp').click(function()
    $.mutbox('請先登入才能進行此動作', '訊息', '確定':function()location.href='https://user.gamer.com.tw/login.php';);
    );







    訂閱私訊


    作品資料夾


    ZeroJudge (98)


    未分類 (0)


    flort810077各位大大
    最近拍了一點公仔跟鋼彈模型 可以來看看喔看更多我要大聲說昨天09:14







    googletag.cmd.push(function() googletag.display('div-gpt-ad-1489070677458-0'); );



    (function(window, $)
    var $window = $(window);
    var $document = $(document);
    var $BH_slave = $("#BH-slave");
    var $BH_master = $("#BH-master");
    var $flySalve = $("#flySalve");
    var posY = $flySalve.position().top;
    var fad_style = document.getElementById("flySalve").style;
    var BH_wrapper_width = $('#BH-wrapper').width();
    var BH_topBar_height = $('.TOP-bh').height();
    $(window).on("scroll", function()
    posY = $BH_slave.height() - (fad_style.position === 'fixed' ? 0 : $flySalve.height());

    if ($document.scrollTop() > (posY + $BH_slave.offset().top - BH_topBar_height) && $BH_slave.height() < $BH_master.height())
    fad_style.position = 'fixed';
    fad_style.top = BH_topBar_height + 'px';
    if ($(window).width() < BH_wrapper_width)
    fad_style.left = (BH_wrapper_width - $BH_slave.width() - $document.scrollLeft())+'px';

    else
    fad_style.position = '';

    ).on("resize", function()
    fad_style.left = null;
    );
    )(window, jQuery);
















    face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】





    The name of the picture黑色沙漠手遊伺服器是巴雷諾斯公會缺人名稱是GO歡迎大家查詢到後加入

    This page is only for reference, If you need detailed information, please check here
    The name of the pictureThe name of the picture

    Popular posts from this blog

    京昆高速公路

    [翻譯?] 就此消失吧

    【心得】新、舊選單《獨立快捷鍵 / 快捷列》增加、更改(圖解)