QOJ.ac

QOJ

Süre Sınırı: 1 s Bellek Sınırı: 2048 MB Toplam puan: 100

#8689. דחיסה

İstatistikler

Infinite Compression Plan Consortium ‏(ICPC) פיתח שיטה חדשה ומצוינת לדחיסת נתונים בשם ״Don’t Repeat Yourself״ (DRY). השיטה פועלת על מחרוזת תווים, ואם יש במחרוזת שני מופעים רצופים של אותה תת־מחרוזת, היא פשוט מוחקת אחד מהם. למשל, במחרוזת ״alfalfa seeds״ אפשר למחוק אחד משני מופעי ״e״ ב־״seeds״ ואחד משני מופעי ״lfa״ ב־״alfalfa״, ולקבל ״alfa seds״. DRY יכולה גם לנצל מחיקות קודמות: למשל, ב־״seventeenth baggage״ היא תמחק תחילה את ״e״ החוזרת ב־״seventeenth״ ואת ״g״ החוזרת ב־״baggage״, ותקבל ״sevententh bagage״, ואז את ״ent״ החוזרת ב־״sevententh״ ואת ״ag״ החוזרת ב־״bagage״, ותקבל ״seventh bage״.

problem_8689_3ff2d9a4f9b2ede806567ffedf595aac.png

התמונה עובדה מתוך Wikimedia Commons, נחלת הכלל

אם יש כמה אפשרויות לתת־מחרוזות החוזרות ברצף שאפשר למחוק, על DRY לבחור כך שהמחרוזת הסופית תהיה קצרה ככל האפשר. למשל, במחרוזת ״ABBCDCABCDCD״ יש שתי אפשרויות: למחוק את ״B״ החוזרת סמוך להתחלה, או את ״CD״ החוזרת בסוף. אם מוחקים את ״B״, אפשר לאחר מכן למחוק את ״ABCDC״ החוזרת, לקבל ״ABCDCD״, ולבסוף למחוק את ״CD״ שבסוף ולקבל ״ABCD״. אבל אם מוחקים תחילה את ״CD״ שבסוף, נשארת ״ABBCDCABCD״, וממנה אפשר למחוק רק את ״B״ החוזרת כדי לקבל ״ABCDCABCD״ — וממחרוזת זו אי אפשר למחוק עוד דבר. לכן הבחירה הנכונה היא להתחיל בדחיסת ״B״ הכפולה, ולסיים ב־״ABCD״.

ICPC הבחין ש־DRY משיגה את התוצאות הטובות ביותר במחרוזות בינאריות, כלומר מחרוזות המורכבות רק מאפסים ואחדים. לכן הוטל עליכם לממש את אלגוריתם DRY הטוב ביותר האפשרי עבור מחרוזות בינאריות. לכל מחרוזת בינארית, עליכם להדפיס מחרוזת קצרה ביותר שאפשר לקבל על ידי הפעלה חוזרת של DRY עליה.

קלט

הקלט מורכב משורה אחת המכילה מחרוזת שאינה ריקה באורך לכל היותר $10^5$, המורכבת רק מאפסים ואחדים.

פלט

הדפיסו שורה אחת המכילה תוצאה קצרה ביותר של הפעלת DRY על מחרוזת הקלט. אם יש כמה תוצאות קצרות ביותר, כל אחת מהן תתקבל.

דוגמאות

קלט 1

1111

פלט 1

1

קלט 2

101

פלט 2

101

קלט 3

10110

פלט 3

10

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.