ABA


"חידה מעולה (מבקש לתת winner לפותר נכונה)."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15424 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15424
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   19:15   30.07.09   
אל הפורום  
  חידה מעולה (מבקש לתת winner לפותר נכונה).  
 
ערכתי לאחרונה בתאריך 30.07.09 בשעה 19:45 בברכה, Deuce
 
לפני הרבה זמן פורסמה חידה (20.08.07):
https://rotter.name/cgi-bin/nor/dcboard.cgi?az=show_thread&om=14262&forum=prog

פותח האשכול עד היום לא פירסם תשובה, והיום אחד מחברי הפורום הפנה אותי לשם.

אני אסביר את החידה וחושב שהיא ראוייה ל-winner:
בעיר רחוקה החליטו לערוך בחירות לראשות העיר.
נסמן ב-M את מספר המתמודדים.
נסמן את מספר התושבים ב-N.
ידוע כי כל התושבים מצביעים למועמד אחד בלבד.

הנתונים נשמרים במערך בקובץ READONLY, כלומר - לא ניתן לשנותו.
הנתונים נשמרים במערך של הצבעות: (1,2,1,3,2,1,2,1,1). יש לקרוא את זה באופן הבא: הצבעה למועמד 1, הצבעה למועמד 2, הצבעה למועמד 1, הצבעה למועמד 3 וכו'. כלומר במקרה הזה יש לנו 9 הצבעות (N = 9) ל-3 מועמדים (M = 3).

מנצח בבחירות הוא מתמודד שיש לו מעל ל-50 אחוז מהקולות. בדוגמא למעלה מתמודד מס' 1 ניצח.

החידה:
בהינתן קלט הכולל מערך RO כפי שתואר לעיל של הצבעות, מספר שלם N שמייצג את מספר ההצבעות ומספר שלם M שמייצג את מספר ההצבעות, להחזיר את מספר המועמד המנצח, או -1 במידה ולא קיים כזה.

אבל יש מספר הגבלות ;):
מותר לכם לעבור עם 10 משתנים פשוטים לכל היותר (בחידה המקורית ניתנו 5 משתנים, לא יודע אם זה כזה חשוב - נסו לפתור עם 5). משתנים פשוטים הכוונה בלי מחרוזות או מערכים וכו'.
שיהיה יעיל ככל האפשר - יותר יעיל מ-O של N*M.

נ.ב:
אני בעצמי לא יודע את הפתרון.
הצלחתי לפתור בסיבוכיות יעילה כאשר השתמשתי במשתנה מטיפוס long והנחתי שהוא יכול לאחסן את מה שאני מכניס לתוכו (שזה מספר דיי גדול).






                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  קיבלת פתרון בפרטי ידידי, akoka 30.07.09 20:11 1
     כל הכבוד ! אבל זה רק בתוחלת ליניארית. Deuce  30.07.09 20:18 2
  כתבתי קוד שפותר לדעתי, בזמן לינארי Nokia 30.07.09 21:02 3
     כל הכבוד, מוריד בפניך את הכובע. Deuce  30.07.09 22:18 5
     אהבתי DOWNTOWN 31.07.09 16:10 6
  יהיה לי זמן להתבונן בזה רק באמצע שבוע הבא, בהצלחה למשתתפים :) ldan192  30.07.09 21:36 4
  להגיד את הפיתרון? יכולת לבקש חח והסיבוכיות היא O(N) sHuMpI 07.08.09 13:21 7
     באתי לשלוח הודעה לפרטי ושכחתי. Deuce  08.08.09 08:00 8

       
akoka

   20:11   30.07.09   
אל הפורום  
  1. קיבלת פתרון בפרטי ידידי,  
בתגובה להודעה מספר 0
 
   אם אף אחד לא יצליח לפתור אני אפרסם!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   20:18   30.07.09   
אל הפורום  
  2. כל הכבוד ! אבל זה רק בתוחלת ליניארית.  
בתגובה להודעה מספר 1
 






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nokia
חבר מתאריך 1.7.02
538 הודעות
   21:02   30.07.09   
אל הפורום  
  3. כתבתי קוד שפותר לדעתי, בזמן לינארי  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 30.07.09 בשעה 21:48 בברכה, Nokia
 
(הקוד כתוב בג'אווה מטעמי זמינות)
https://rotter.name/User_files/nor/4a71dec94aa0a9a1.txt

אני מקווה שאין לי טעות בקוד
הרעיון הוא כזה:

אני מניח קודם כל שיש לי באמת איבר כזה. אפשר להוכיח טענה כזאת:
אם קיים איבר שמופיע במערך יותר מ50% מהפעמים
קיימת סיפא בה האיבר הזה יופיע יותר מ50% מהפעמים

מהטענה הזאת אני יכול לפסול כל סדרת מספרים בה אין איבר דומיננטי (שמופיע יותר מ50% מהפעמים) ואז האיבר שאני אישאר איתו בסוף (שהופיע בסיפא כלשהי יותר מ50% מהפעמים הוא יהיה ה"זוכה שלי".

עכשיו זה לא מספיק, כי במצב כזה: 1,2,3 אני בעצם אבחר ב3 כי הוא היה האחרון (בהתחלה המנצח שלי היה 1, אח"כ בגלל שהגיע 2 ואין ב1,2 איבר דומיננטי פסלתי את שניהם, ואז בחרתי את 3). אז הבדיקה השנייה שאני עושה היא לקחת את האיבר שבחרתי ולבדוק שהוא אכן מופיע יותר מ50% מהפעמים , אחרת אני מחזיר 1-

סה"כ זמן לינארי (2 לולאות של באורך המערך) ומס' קטן של משתנים (5) לדעתי אפשר גם ב4 אם אני משתמש באותו איבר לספור איברים בקטע נתון וגם לבדוק שקיים איבר שמופיע יותר מ50% מהפעמים (מונה שמתחיל ב0 עם האיבר הנוכחי ועושה 1+ ו1- בהתאם לאם האיבר שהגיע הוא המקסימום המקומי או לא, אם הוא שוב ב0 אז מחליפים מקסימום מקומי)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   22:18   30.07.09   
אל הפורום  
  5. כל הכבוד, מוריד בפניך את הכובע.  
בתגובה להודעה מספר 3
 
אני לא חשבתי על הדרך הזאת.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DOWNTOWN
חבר מתאריך 28.5.02
5388 הודעות
   16:10   31.07.09   
אל הפורום  
  6. אהבתי  
בתגובה להודעה מספר 3
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   21:36   30.07.09   
אל הפורום  
  4. יהיה לי זמן להתבונן בזה רק באמצע שבוע הבא, בהצלחה למשתתפים :)  
בתגובה להודעה מספר 0
 


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
sHuMpI

   13:21   07.08.09   
אל הפורום  
  7. להגיד את הפיתרון? יכולת לבקש חח והסיבוכיות היא O(N)  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 07.08.09 בשעה 13:27 בברכה, sHuMpI
 
והרעיון של נוקיה נכון...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   08:00   08.08.09   
אל הפורום  
  8. באתי לשלוח הודעה לפרטי ושכחתי.  
בתגובה להודעה מספר 7
 
בכל מקרה טוב לראות אותך






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net