|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.10.2012, 11:42 | #1 |
- Дорогой, а ты ку
Форумчанин
Регистрация: 06.10.2012
Сообщений: 181
|
Телешоу (Время: 2 сек. Память: 16 Мб Сложность: 66%)
В новом интеллектуальном телешоу участнику, проходящему в суперфинал, предлагается следующая игра: на каждом из n секторов большого барабана записывается буква латинского алфавита li. После минуты на размышления игрок указывает одну из позиций на барабане i. Его выигрыш вычисляется по такому правилу: для каждой позиции j меньшее из расстояний по и против часовой стрелке от i до j, измеренное в секторах, умножается на абсолютною величину разности номеров в алфавите букв li и lj , после чего все такие величины суммируются.
А Вы можете написать программу, находящую способ получения наибольшего выигрыша? Входные данные Первая строка входного файла INPUT.TXT содержит натуральное число n (1 ≤ n ≤ 100000) - размер барабана. Во второй строке задаются разделенные пробелами строчные латинские буквы, записанные на барабане. Выходные данные В первой строке выходного файла OUTPUT.TXT выведите наибольший выигрыш, который можно получить при заданном расположении букв на барабане. Во второй строке выведите номер какого-нибудь из секторов, на который игрок должен для этого указать. Пример № INPUT.TXT OUTPUT.TXT 1 4 r e a r 55 3 вот моё решение import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.io.StreamTokenizer; import java.util.HashMap; import java.util.Locale; import java.util.Map; public class game_is { public game_is{ StreamTokenizer in; PrintWriter out; HashMap<Character, Long> m; public game_is() { Locale.setDefault(Locale.US); try { in = new StreamTokenizer(new BufferedReader(new FileReader((new File("input.txt"))))); out = new PrintWriter(new File("output.txt")); } catch (Exception e) { e.printStackTrace(); } } static void add(HashMap<Character, Long> m, char c, long d) { Long i = m.get(c); if (i == null) i = new Long(0); m.put(c, i + d); } void solve() { tryblock: try { in.nextToken(); int n = (int) in.nval; if (n == 1) { out.println(0); out.println(1); out.close(); break tryblock; } char[] a = new char[n]; for (int i = 0; i < n; i++) { in.nextToken(); a[i] = in.sval.charAt(0); } int nmax = 0; long max = 0; m = new HashMap<Character, Long>(); add(m, a[0], 1); add(m, a[1], -1); int i = 2; int j = n - 1; HashMap<Character, Long> s = new HashMap<Character, Long>(); add(s, a[1], 1); while (i <= j) { add(s, a[j], i - 1); if (i == j) break; add(m, a[j], 1); add(s, a[i], i); add(m, a[i], -1); i++; j--; } for (i = 0; i < n; i++) { long r = 0; for (Map.Entry<Character, Long> e : s.entrySet()) r += Math.abs(e.getKey() - a[i]) * e.getValue(); if (max < r) { max = r; nmax = i; } for (Map.Entry<Character, Long> e : m.entrySet()) add(s, e.getKey(), e.getValue()); add(m, a[(i + 1) % n], 2); add(m, a[(i + 1 + n / 2) % n], -1); add(m, a[(i + 1 + (n + 1) / 2) % n], -1); } out.println(max); out.println(nmax + 1); out.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { new Thread(new Runnable() { public void run() { game_is solution = new game_is(); solution.solve(); } }).start(); } } } НО ПОЧЕМУ-ТО Compilation error ПИШИТ Main.java:13: <identifier> expected public game_is{ ^ Main.java:110: class, interface, or enum expected } ^ 2 errors ПОМОГИТЕ РАЗОБРАТЬСЯ |
16.10.2012, 14:34 | #2 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Код:
|
16.10.2012, 19:13 | #3 |
- Дорогой, а ты ку
Форумчанин
Регистрация: 06.10.2012
Сообщений: 181
|
напиши побратски
полный код а то в яве чайник |
04.01.2013, 03:23 | #4 |
Новичок
Джуниор
Регистрация: 04.01.2013
Сообщений: 1
|
Решение
Немного подправил.
Если не сложно, выложи решение N334. import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.io.StreamTokenizer; import java.util.HashMap; import java.util.Locale; import java.util.Map; public class Main implements Runnable { StreamTokenizer in; PrintWriter out; HashMap<Character, Long> m; static void add(HashMap<Character, Long> m, char c, long d) { Long i = m.get(c); if (i == null) i = new Long(0); m.put(c, i + d); } public void run() { solve(); } void solve() { tryblock: try { in = new StreamTokenizer(new BufferedReader(new FileReader((new File("input.txt"))))); out = new PrintWriter(new File("output.txt")); in.nextToken(); int n = (int) in.nval; if (n == 1) { out.println(0); out.println(1); out.close(); break tryblock; } char[] a = new char[n]; for (int i = 0; i < n; i++) { in.nextToken(); a[i] = in.sval.charAt(0); } int nmax = 0; long max = 0; m = new HashMap<Character, Long>(); add(m, a[0], 1); add(m, a[1], -1); int i = 2; int j = n - 1; HashMap<Character, Long> s = new HashMap<Character, Long>(); add(s, a[1], 1); while (i <= j) { add(s, a[j], i - 1); if (i == j) break; add(m, a[j], 1); add(s, a[i], i); add(m, a[i], -1); i++; j--; } for (i = 0; i < n; i++) { long r = 0; for (Map.Entry<Character, Long> e : s.entrySet()) r += Math.abs(e.getKey() - a[i]) * e.getValue(); if (max < r) { max = r; nmax = i; } for (Map.Entry<Character, Long> e : m.entrySet()) add(s, e.getKey(), e.getValue()); add(m, a[(i + 1) % n], 2); add(m, a[(i + 1 + n / 2) % n], -1); add(m, a[(i + 1 + (n + 1) / 2) % n], -1); } out.println(max); out.println(nmax + 1); out.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws IOException { new Thread(new Main()).start(); } } |
04.01.2013, 18:21 | #5 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
334-я
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Школьная алгебра (Время: 1 сек. Память: 16 Мб Сложность: 27%) | kostan3 | Помощь студентам | 1 | 06.10.2012 18:32 |
Вспомнить телешоу - помoгите | Сtrl | Свободное общение | 2 | 17.07.2011 05:31 |
Сложность и время работы сортировки Шелла | lega4 | Помощь студентам | 0 | 11.04.2011 11:02 |
Как округлить милисекунды в кол-во сек и мили сек? | XerSon | Общие вопросы Delphi | 2 | 09.06.2010 10:26 |