Common Board| Show all threads Hide all threads Show all messages Hide all messages | | Самое понятное для меня решение. | Nikita Mogilevets | 1031. Railway Tickets | 21 Jul 2017 11:35 | 1 | Можно считать, что мы имеем ориентированный взвешенный граф, у которого максимальная степень вершины равна трём . Равна она трём потому, что нам всегда выгодно ехать как можно дальше, потому что мы заплатили за всю дистанцию. То есть из какой-то станции ребра с весами C1, C2 и C3 проводим в как можно более далёкие станции. Тогда это получается очень сильно разреженный граф, так как N<=1e4. На этом графе запускаем алгоритм Дейкстры для разреженных графов. Я использовал вариант за O(Nlog2N) с std :: set. Для расчёта того, куда проводить ребра, я использовал бинарный поиск. И немного запорол реализацию этого поиска. Мой поиск возвращал первую станцию, которая находится дальше, чем разрешено. И возвращал он некорректное значение, если не было такой станции. Это послужило причиной WA#6. Причиной WA#2 послужило то, что я забыл сделать обновление расстояния до пункта назначения. Так как ребра идут жадно, то пункт назначения проезжался и в очередь не попадал, и расстояние соответственно никогда не обновлялось. | | WA #8 | Anna Tokhyan | 1112. Cover | 20 Jul 2017 23:59 | 4 | WA #8 Anna Tokhyan 11 Jul 2017 03:14 Does anyone know the 8th test? Re: WA #8 Nikita Mogilevets 18 Jul 2017 17:54 The test is such an input data That if the program behaves as burunduk1 described in his habrahabr.ru post from 2015 It passes the test (And all others tests too) Re: WA #8 Nikita Mogilevets 18 Jul 2017 17:58 So, sort intervals according to RIGHT endpoints in non-decreasing order. Consider intervals in the sorted order. Let M=max of all right ends added so far. Then if current left end is not less than M then add current interval to answer and update M if current right end is greater than M. | | Python3 help me to understand, what is wrong? | master8282 | 1001. Reverse Root | 20 Jul 2017 23:22 | 6 | Original code in your page: string = input() split_input = string.split() lst = [] [lst.append(int(ndx) ** 0.5) for ndx in split_input] [print("%.4f" % round(ndx, 4)) for ndx in lst[::-1]] My tests in spyder: Code: with open('/tmp/123.txt', 'r') as f: string = f.read()
split_input = string.split() lst = [] [lst.append(int(ndx) ** 0.5) for ndx in split_input] [print("%.4f" % round(ndx, 4)) for ndx in lst[::-1]] Answer: runfile('/home/ant/.config/spyder-py3/temp.py', wdir='/home/ant/.config/spyder-py3') 2297.0716 936297014.1164 0.0000 37.7757 Edited by author 20.07.2017 03:14 Edited by author 20.07.2017 03:15 What does input() ? I think input just reads a LINE Not SEVERAL LINES input() just reads ONE LINE There are multiple lines in the input data That is written in the statement You are reading just the first line And you are missing numbers on the next lines I suggest you to use for line in stdin : for x in line. split () : ans. append (int(x) **0.5) Thank you, gotcha you. Now the code passed well. import sys import re lst = [] for ndx in sys.stdin: lst += re.findall(r'\d+|$', ndx) [print("%.4f" % round(int(ndx)**0.5, 4)) for ndx in lst[::-1] if ndx != ''] | | Is y<=x? | andrejko | 1484. Film Rating | 20 Jul 2017 19:47 | 2 | | | Accepted using Ford-Bellman | Nikita Mogilevets | 1871. Seismic Waves | 20 Jul 2017 14:42 | 1 | Рассчитывал я две величины. (1) dp[i] -- минимальное количество символов, которое должен прочесть i-й человек для того, чтобы узнать о землетрясении (2) len[i] -- минимальное количество символов, которое необходимо для того, чтобы ретвитнуть сообщение i-го человека. | | WA#6 | Contego | 1586. Threeprime Numbers | 20 Jul 2017 12:57 | 2 | WA#6 Contego 10 Feb 2016 01:48 WA#6 => check if you use module (1e9 + 9) | | Wrong Answer (C). Which reason? | exe-cute-er | 1877. Bicycle Codes | 19 Jul 2017 23:43 | 2 | #include <stdio.h> int main() { int a, b; scanf("%d %d", &a, &b); if (a % 2 == 0 || b % 2 != 0) { printf("YES"); } else { printf("NO"); } return 0; } Posted by Deepto Shome Pritom 4 Feb 2017 21:06 Test 1: Den's keys: 0001 0000 1st night 2nd night 3rd night 4th night ... ... ... All nights bike's key 0001 0000 0001 0000 - bad man 0000 0001 0003 0004 - result no no no no no Test 2: Den's keys: 0002 0001 1st night 2nd night 3rd night 4th night ... ... ... All nights bike's key 0002 0001 0002 0001 - bad man 0000 0001 0003 0004 - result no yes no no yes In the first test all nights result is "no". That why in the first test result is no. try to understand .. happy coding Edited by author 19.07.2017 23:44 | | Я не знаю почему так | Nikita Mogilevets | 1244. Gentlemen | 19 Jul 2017 20:37 | 2 | Я написал на чистом Си и не мог ну никак пробиться через WA#4 Затем я переписал на Си++14 и получил AС Видимо сложность Си и отсутствие привычных функций STD меня отвлекают от сути задачи в какой-то мере Ну а алгоритм -- это задача о рюкзаке Вместимость рюкзака равна рвзности между суммарным весом всех карт и весом неполной колоды. | | Copy on Write. | Nikita Mogilevets | 1992. CVS | 19 Jul 2017 16:08 | 1 | Я использовал для решения стратегию copy on write. I have used copy on write strategy. Когда я использовал scanf и printf, я получал TLE#9. When used scanf and prin tf got TLE#9. Когда заменил ввод на ввод через unlocked getchar и putchar, то получил АС за менее чем 0.6 сек. AC < 0.6 sec with _getchar_nolock and _putchar_nolock. Ну и немного на русском про саму COW-стратегию. Есть вектор реальных объектов клонов, а есть вектор ссылок на эти объекты. Новый объект в первом векторе создаётся не при клонировании, а при попытке изменить реального клона, на который есть больше одной ссылки. Во втором же векторе новые объекты создаются, напротив, только при клонировании. | | My Simple Java Solution | Md johirul Islam | 2012. About Grisha N. | 19 Jul 2017 13:01 | 3 | import java.util.Scanner; public class T2012 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); int f=sc.nextInt(); int r=12-f; int time=r*45; if(time<=240) System.out.println("YES"); else System.out.println("NO"); } } for python a=int(input()) question=12 time=240 tasks_left=question-a if tasks_left*45<=240: print('true') else: print('false') | | Python 2.7 | Evgeny | 1409. Two Gangsters | 19 Jul 2017 12:33 | 3 | [code deleted] === Return "Fail (checker)", why? Edited by moderator 20.11.2019 00:01 the necessary conditions to enter through the gap, and you have 2 line this. Hi you need to split a and b [code deleted] good luck Edited by author 19.07.2017 12:34 Edited by moderator 20.11.2019 00:01 | | Пара тестов | DarkSun1997 | 1494. Monobilliards | 19 Jul 2017 12:07 | 7 | Есть наверно несколько решений этой задачи. Я использовал стек пар. first это было верхняя грань пары, second нижняя. Как только я считал число, я посмотрел на первый элемент в стеке на его верхнюю грань, если она совпадала, то я понижал грань на -1, если в стеке еще и грани местами менялись то есть first<second, то удалял элемент. Если же элемент который я считал был меньше чем верхняя грань первого элемента в стеке, то выводил фразу читер!!!! Если стек оказывался пустым или элмент считывания оказывался больше чем верхняя грань первого элемента, то создавал новую пару и ее грани first присваивал считанное значение, а second присваивал значение h. h это число которое в начале было равно 1 а после добавления нового элемента в стек становилось считанное число +1. Оно менялось у меня только когда добавлял что-то. Потом проверял если новый элемент стека верхняя и нижняя грань совпадает то удалял его, иначе понижал нверхнюю границу на -1. Если в конце чтения стек становился пустым, то значит выводим фразу Not a proof. К сожалению нельзя кидать код программ... Но могу поделиться парой тестов: 5 3 2 5 4 1 Not a proof 5 3 5 2 4 1 Cheater 4 3 4 1 2 Cheater Да это адская задача, я уже решаю года полтора безуспешно Решение не пытаюсь посмотреть принципиально Ничего не помогает решить Ничего тут сложного нет, просто симулируем сам процесс закатывания. Разберём например тест 10 5 8 7 6 4 10 2 1 3 9. Пускай мы встретили во входе 5, значит докидываем в массив 1 2 3 4 5. Затем процесс удаления: сравниваем 5 из входа с последним элементом, они равны, значит становится 1 2 3 4. Потом встретили 8, оно больше нашего последнего закинутого шара, докидываем 6 7 8, получаем 1 2 3 4 6 7 8. И повторяем процесс удаления, описанный выше. Потом допустим 7, 6, 4, и каждый раз число из входа совпадает с последним элементом массива. Поудаляли, получили 1 2 3. Потом получаем 10, оно больше последнего закинутого шара, докидываем в массив, получаем 1 2 3 9 10 (и сразу же удаляем, получаем 1 2 3 9). Потом получаем 2, но последний элемент 9, а не 2, и тут мы понимаем, что ответ Cheater. Ну я не смотрю решений. Сам додуматься не могу. Я хочу как-нибудь ссимулировать. Не могу придумать, как это сделать. Лучше скажите мне, что решить, какие задачи, которые бы меня подготовили к решению этой. Да тот же 1220 stacks, который вы недавно пытались решать. Разница лишь в следующем: — там много стаков, а тут один — тут только pop-запросы — pop-запрос, который больше всех предыдущих, автоматически означает, что перед ним надо допушить недостающие шары. Ну я сделал двусвязный список в статическом массиве И проверял всегда ли верно Что я беру либо непосредственно следующий шар из оставшихся Либо любой шар выше Поздравляю с AC :) P. S. Двусвязный список, кстати, не обязателен, я делал просто массив, и у меня была переменная для текущего размера массива, и если удаляем элемент, то я просто её уменьшал, а если добавляем, то увеличивал и менял элемент на новый. Edited by author 19.07.2017 12:11 | | Задача решается "в лоб" | Nikita Mogilevets | 1007. Code Words | 19 Jul 2017 00:52 | 1 | Просто по длине слова определяем, какой у нас случай. (Замена, удаление или вставка). Затем для каждой позиции пытаемся внести изменения и смотрим, получается у нас выполнение условия или нет. Удобно завести массив постфиксных сумм для того чтобы быстро пересчитать сумму позиций единиц. | | Надоело писать на чужом языке. Решение на русском. | Nikita Mogilevets | 1247. Check a Sequence | 18 Jul 2017 22:28 | 1 | Так как сумма всех элементов последовательности равна (S+N), то сумма всех элементов последовательности, в которой каждый элемент уменьшен на единицу, равна просто N. Тогда если мы найдём в такой последовательности с уменьшенными членами отрезок с максимальной суммой и сравним сумму на нем с числом N, то мы узнаем ответ на задачу. А именно, если эта сумма превосходит N, то ответ "NO". В противном случае, ответ "YES". Отрезок с максимальной суммой ищется за O(n) методом кумулятивных сумм. | | WA 1 | Raman Gupta | 1658. Sum of Digits | 18 Jul 2017 18:40 | 4 | WA 1 Raman Gupta 3 Dec 2012 19:49 All the test cases given in this forum are working.But giving WA 1 my code is: #include <stdio.h> #include <string.h> int len[910][8110]; int dig[910][8110]; int num[110]; int main(){ int t,s1,s2,k,pt,i,j,l,temp; memset(len,0,sizeof(len)); for(i=1;i<=900;i++){ for(j=1;j<=8100;j++){ for(k=1;k<=9;k++){ if((i-k)<0||(j-k*k)<0) break; else if((i-k)==0&&(j-k*k)==0){ len[i][j] = 1; dig[i][j] = k; } else if(len[i-k][j-k*k]>0){ if(len[i-k][j-k*k]+1<len[i][j]||len[i][j]==0){ len[i][j] = len[i-k][j-k*k]+1; dig[i][j] = k; } } else continue; } } } scanf("%d",&t); while(t--){ scanf("%d %d",&s1,&s2); pt = 0; if(len[s1][s2]==0||len[s1][s2]>100) printf("No Solution"); else{ i=s1; j=s2; while((len[i][j]>=1)&&i>=1&&j>=1){ l = dig[i][j]; num[pt++] = l; i = i-l; l = l*l; j-=l; } for(i=0;i<pt;i++){ for(j=i+1;j<pt;j++){ if(num[i]>num[j]){ temp=num[i]; num[i]=num[j]; num[j] = temp; } } } for(i=0;i<pt;i++) printf("%d",num[i]); } printf("\n"); } return 0; } Your mistake is here: if(len[i-k][j-k*k]+1<len[i][j]||len[i][j]==0){ len[i][j] = len[i-k][j-k*k]+1; dig[i][j] = k; } length might be the same but the value might be smaller. You just check the length. Re: WA 1 Nikita Mogilevets 18 Jul 2017 18:40 I am able to see experimentally that length really might be the same while the values differ I can't understand why it so I feel that it can't be truth "S" in "Solution" shouldn't be capital :P | | The only possible difficulty. | Nikita Mogilevets | 1072. Routing | 17 Jul 2017 23:37 | 1 | To read IP address /subnet mask I recommend you to use the following template unsigned int read_mask(){ unsigned int a, b, c, d; scanf("%u.%u.%u.%u", &a, &b, &c, &d); return (a<<24) + (b<<16) + (c<<8) + d; } | | INCREDIBLE easy problem. | Nikita Mogilevets | 1160. Network | 17 Jul 2017 21:22 | 3 | You can just sort edges in non-increasing order and add them sequentially until there are two or more connectivity components... It is absolutely of no importance How many edges are used Only the size if the largest edge matters I DON'T KNOW why the problem rating is not 80, but 300. Don't say things like There you need DSU Anansi's Cobweb requires DSU And it is only 170 rating points | | WA #2 | YuFeng | 1451. Beerhouse Tale | 17 Jul 2017 19:44 | 2 | WA #2 YuFeng 17 Jul 2017 19:41 Re: WA #2 Nikita Mogilevets 17 Jul 2017 19:44 I don't know the test I know exactly Because I have verified it myself That ternary search gives a solution Even C float type is enough And something about 200 iterations in each loop | | No subject | YuFeng | 1451. Beerhouse Tale | 17 Jul 2017 19:38 | 1 | Edited by author 17.07.2017 19:41 | | It took pretty long time | Nikita Mogilevets | 1523. K-inversions | 17 Jul 2017 16:52 | 1 | It was hard to understand how to calculate the answer. It is relatively easy to invent a correct solution when you know the expected time complexity. Solve the task online, read elements one by one. So, you have dp[i][j] = count of different j-inversions ending at element number j. dp[i] [j] =sum (dp[p] [j-1]) for all p>i. The answer is sum(dp[i] [k]) for all i=0...n-1. As mentioned below, an array of Fenwick trees is your friend. |
|
|