Rezultati

Up. imeNalogaJezikRezultatČas oddaje
RipUA Pasavci C++ 0/100Prekoračen čas (TLE) 11. maj '17 @ 18:24

Test Točke Porabljen spomin Porabljen čas Status
#1 0/5 3,363 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​0
0
0
<<<EOF>>>
Pravilen izhod:
​0
<<<EOF>>>
#2 0/5 3,563 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​0
0
0
<<<EOF>>>
Pravilen izhod:
​0
<<<EOF>>>
#3 0/5 3,754 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​2
0
196
<<<EOF>>>
Pravilen izhod:
​196
<<<EOF>>>
#4 0/5 3,918 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​0
3
1779
<<<EOF>>>
Pravilen izhod:
​1779
<<<EOF>>>
#5 0/5 4,117 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​4
1
387
<<<EOF>>>
Pravilen izhod:
​387
<<<EOF>>>
#6 0/5 5,070 MiB 0,010 s Napačen odgovor
Tvoj izhod:
​2
0
1012
<<<EOF>>>
Pravilen izhod:
​1012
<<<EOF>>>
#7 0/5 5,074 MiB 0,010 s Napačen odgovor
Tvoj izhod:
​2
7
1602
<<<EOF>>>
Pravilen izhod:
​1602
<<<EOF>>>
#8 0/5 5,074 MiB 0,010 s Napačen odgovor
Tvoj izhod:
​20
24
20176
<<<EOF>>>
Pravilen izhod:
​20176
<<<EOF>>>
#9 0/6 5,094 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​106
97
50920
<<<EOF>>>
Pravilen izhod:
​50920
<<<EOF>>>
#10 0/6 4,355 MiB 1,521 s Prekoračen čas
#11 0/6 3,148 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​0
0
2
<<<EOF>>>
Pravilen izhod:
​2
<<<EOF>>>
#12 0/6 3,164 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​1
0
4
<<<EOF>>>
Pravilen izhod:
​4
<<<EOF>>>
#13 0/6 3,160 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​0
0
7
<<<EOF>>>
Pravilen izhod:
​7
<<<EOF>>>
#14 0/6 3,168 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​0
0
2
<<<EOF>>>
Pravilen izhod:
​2
<<<EOF>>>
#15 0/6 3,176 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​0
0
1048567
<<<EOF>>>
Pravilen izhod:
​1048567
<<<EOF>>>
#16 0/6 3,160 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​0
0
2
<<<EOF>>>
Pravilen izhod:
​2
<<<EOF>>>
#17 0/6 3,176 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​0
1
0
<<<EOF>>>
Pravilen izhod:
​0
<<<EOF>>>
#18 0/6 4,293 MiB 1,515 s Prekoračen čas

Ocenjevani program (main.cpp):
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>

using namespace std;

#define MOD 1000000007

int dolzine[1005];
char nizi[1005][2000];
long long repeats[1005];
string p;
int pLen;
int maxLen;
char workSpace[2000];

inline int GetRepeats (const char* niz, int len){
	int repeats = 0;
	for(int i = 0; i <= len - pLen; i++){
		for(int j = 0; j < pLen; j++){
			if (niz[i+j] != p[j]) goto next;
		}
		repeats++;
		next:;
	}
	return repeats;
}

int main(int argc, char** argv) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	string niz0;
	string niz1;
	cin>>p;
	pLen = p.length();
	maxLen = (pLen - 1) * 2;
	cin>>niz0;
	cin>>niz1;
	repeats[0] = GetRepeats(&niz0[0], niz0.length());
	repeats[1] = GetRepeats(&niz1[0], niz1.length());
	
	for(int i = 0; i < niz0.length(); i++){
		nizi[0][i] = niz0[i];
	}
	for(int i = 0; i < niz1.length(); i++){
		nizi[1][i] = niz1[i];
	}
	dolzine[0] = niz0.length();
	dolzine[1] = niz1.length();
	
	
	cout<<repeats[0]<<endl;
	cout<<repeats[1]<<endl;
	
	int n;
	cin>>n;
	int s1, s2;
	
	for(int i = 2; i < n + 2; i++){
		cin>>s1;
		cin>>s2;
		s1--;
		s2--;
		dolzine[i] = dolzine[s1] + dolzine[s2];
		if (dolzine[i] > maxLen) dolzine[i] = maxLen;
		repeats[i] = repeats[s1] + repeats[s2];
		
		int firstPartLen = min(dolzine[s1], pLen-1);
		int secondPartLen = min(dolzine[s2], pLen-1);
		
		memcpy(nizi[i], nizi[s1], firstPartLen);
		memcpy(nizi[i] + firstPartLen, nizi[s2] + (dolzine[s2] - secondPartLen), secondPartLen);
		
		
		memcpy(workSpace, nizi[s1] + (dolzine[s1] - firstPartLen), firstPartLen);
		memcpy(workSpace + firstPartLen, nizi[s2], secondPartLen);
		
		repeats[i] += GetRepeats(workSpace, firstPartLen + secondPartLen);
		
		/*cout<<"REPEATS:"<<repeats[i]<<endl;
		
		for(int j = 0; j < firstPartLen + secondPartLen; j++){
			//cout<<nizi[i][j];
			cout<<workSpace[j];
		}
		cout<<endl;
		*/
		
	}
	
	cout<<repeats[n+1] % MOD<<endl;
	
	return 0;
}