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