Блог пользователя dalex

Автор dalex, 12 лет назад, По-русски

Не так давно в нашем вузе был проведен очередной отборочный контест на четвертьфинал ACM ICPC, по результатам которого мы отобрали команды, которые поедут в Саратов этой осенью. Тренировка по задачам этого контеста состоится в воскресенье, 21 сентября, в 11.00.

Ссылка на контест: 2014, Отборочный контест СГАУ на четвертьфинал ACM ICPC

Список предыдущих наших контестов:

Есть разбор задач на русском языке: https://www.youtube.com/watch?v=yLwyPXNEpYM Сразу извиняюсь за то, что я фигово разбираю задачи (мои были A, B, H, J), больше такого не повторится, т.к. я заставлю все задачи разбирать craus-а — он это делает наиболее круто.

  • Проголосовать: нравится
  • +104
  • Проголосовать: не нравится

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

Thx~It seems Chinese have no time to participate in it because of the online contest

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

А у нас отборочный в том году был таким: межвузовская олимпиада студентов, каждый сам за себя, 6 задач, пять из которых, благодаря своим ограничениям, решались с помощью полного перебора, и только по одной нужно было действительно динамику писать. Первые 6 человек в олимпиаде с нашего вуза образовали две команды, и было это всего за неделю до поездки на четвертьфинал. За эту неделю наша команда успела собраться 2-3 раза, совсем немного по-готовились, и на четвертьфинале смогла решить всего 2 задачи. Это был неплохой результат для первой поездки, так как обычно новички с нашего вуза решали ноль задач первый раз (собственно, именно такой результат продемонстрировала вторая команда).

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +5 Проголосовать: не нравится

Извините открылось.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится

Задачи просто отличные!

Если бы не тупил так много, решил бы штук 7 :)

Столько глупых ошибок, оооох, надо работать над собой)

  • »
    »
    12 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    То есть в принципе есть резон командой их прорешать, да? Мы просто не очень скилловые, если сравнивать с Саратовом, в тренировках Станкевича решали 2 задачи максимум и поняли, что нет смысла его задачки решать, рановато...

    • »
      »
      »
      12 лет назад, скрыть # ^ |
      Rev. 3  
      Проголосовать: нравится +3 Проголосовать: не нравится

      Фиолетовым самое то наши контесты решать, а потом еще в дорешку все задачи сдавать. Тренировки Станкевича намного сложнее (хм, я подумал, что ты про контесты Станкевича; хотя если имелись в виду neerc.ifmo.ru/trains, то они равно сложнее).

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

How to solve E.? My idea was to use DP. Try all possible split points and solve sub-problem (like matrix chain multiplication) but I couldn't implement it (size of string was an issue as well).

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -15 Проголосовать: не нравится

Guys, can you explain why you write all these treaps and splay trees in problems that don't require them?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

What is the approach to solve problem I ? In sample test 3 , Why is there no possible answer : I think the possible answer might be 1 2 3 2 . I might be wrong , am I missing anything ?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +16 Проголосовать: не нравится

How to solve Problem K (Two Pirates)? Why is greedy approach not working for this problem? And what can be perfect approach to solve this question.Any help?

  • »
    »
    12 лет назад, скрыть # ^ |
    Rev. 3  
    Проголосовать: нравится +3 Проголосовать: не нравится

    A counterexample to greedy : 99,1,2,100.

    My method :

    Use DP, let dp[2k] denote the maximum that the first pirate can get after 2k turns, and the two pirates take only the first 2k items. So we can write dp[2k]=max( dp[2k-2]+a[2k-1] , dp[2k-2]+a[2k] , dp[2k-2]-m+a[2k-1]+a[2k] ),

    where m is the minimal value that the first pirate took in dp[2k-2].

    • »
      »
      »
      12 лет назад, скрыть # ^ |
      Rev. 3  
      Проголосовать: нравится 0 Проголосовать: не нравится

      My code gives 199 2 as output for this test case.That is as expected to happen.And can you please explain your DP .How you come to it ?

      Here is what I did : Suppose I am having a segment tree to update an elemnt and find maximum in a range. cin>>arrLength;

      long long  s=0;
      for(long long  i=0;i<arrLength;i++){
          cin>>data[i];
          s+=data[i];
      }
      initSegmentTree();
      buildSegmentTree();
      long long A=0;
      long long B=0;
      long long  c=0,j,d=0;
      for(long long  i=0;i<arrLength;i+=2){
              for(j=c;j<arrLength;j++){
                  if(data[j]!=INT_MIN)
                  break; 
              }
              c=j;
              for(j=c+1;j<arrLength;j++){
                  if(data[j]!=INT_MIN)
                  break;
              }
              if(j>=arrLength)
              {
                  A+=data[c];
                  break;
              }
              d=j;
              long long  pos = query(c,arrLength-1);
              if(data[pos]-data[c]>data[c]-data[d]){
                  A+=data[pos];
                  update(pos,INT_MIN);
                  update(c,INT_MIN);
                  c++;
              }
              else{
                  A+=data[c];
                  update(c,INT_MIN);
                  update(d,INT_MIN);
                  c++;
              }
      }
    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      First of all, thanks for the solution. :)

      I tried to implement your idea, and it passes the 2 given test cases (and the ones I made) but I keep getting Wrong Answer on Test Case 1.

      Can somebody help me in figuring out where is my mistake?

      My code: 7949600

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +11 Проголосовать: не нравится

    Anti-greedy test: 6 3 8 7 2 4 1 5. We should take 8 and 7, and remain 6 and 3 at the first two iterations.

    The process described in the problem is equivalent to the following: the first pirate takes all items, but every even step he throws away the cheapest one. Easy to implement with priority queue.

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Is answer for your test case 23 13 (As is provided by my approach)?Also whats the priority criteria to throw away the cheapest item.Please explain.Is position of element used as priority criteria?

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +3 Проголосовать: не нравится

        Optimal solution is 24 12: first pirate takes 8, 7, 5 and 4.

        About priority criteria: is the word "cheapest" so unclear?

        On every prefix [1, k] of the array (k is even) first pirate must take no more than k/2 items. Think about it. But we take all items, and when we discover that we have taken too many items, we throw away the one with the lowest price. It happens after every even turn.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

someone explain the approach behind problem M

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Excuse me, could anyone explain the meaning of Prob A? Where is the black hole and whether it could move? Thanks a lot!

Sorry for my poor English.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Any hints for solving C and I( I don't understand simple test case #3)?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Can someone tell me why my solution for problem E is not correct ? Basically, my idea consists of matching each character with another one different from it.

 string s;
	cin >> s;

	int al[26];
	for( int i = 0; i < 26; i++ )
		al[i] = 0;

	int n = s.size();
	for( int i = 0; i < n; i++ )
		al[s[i] - 'a']++;

	sort(al, al+26);
	reverse(al, al+26);
	
	bool ok = 1;
	for( int i = 0; i < 26; i++ ) {
		for( int j = i + 1; j < 26; j++ ) {
			int del = min(al[i], al[j]);

			al[i] -= del;
			al[j] -= del;
		}

		if( al[i] != 0 ) ok = 0;
	}

	if( ok ) cout << "YES" << endl;
	else	 cout << "NO"  << endl;

	return 0;
}
»
12 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

Does problem L use splay?Can it use other idea?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

Can problem L use other idea other than splay?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

How to solve A.?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

In Problem G, I tried a greedy approach since all coins are multiples of each other ! But it doesn't work can someone give me a counter example!
My code is here

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

How to solve H,J,K?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

can we have an editorial?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

How to solve I?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

What's test 24 of prob C? I got TLE but I don't know why.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

Спасибо авторам задач, очень понравились задания.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +23 Проголосовать: не нравится

My codes: A B C D E F G H I J K L M