답안 #71076

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
71076 2018-08-24T05:43:41 Z KLPP Selling RNA Strands (JOI16_selling_rna) C++14
0 / 100
1500 ms 44544 KB
#include<iostream>
#include<vector>
#include<algorithm>
#include<stdio.h>
using namespace std;
#define MOD 1000000007
#define BASE 257
typedef long long int lld;
bool cmp(string a, string b){
	for(int i=0;i<a.size() && i<b.size();i++){
		if(a.at(i)<b.at(i))return true;
		if(a.at(i)>b.at(i))return false;
	}
	if(a.length()<=b.length())return true;
	return false;
}
bool cmp2(string a, string b){
	for(int i=0;i<a.size() && i<b.size();i++){
		if(a.at(i)<b.at(i))return true;
		if(a.at(i)>b.at(i))return false;
	}
	if(a.length()>b.length())return true;
	return false;
}
int main(){
	int n,m;
	cin>>n>>m;
	string arr[n];
	for(int i=0;i<n;i++){
		cin>>arr[i];
	}
	sort(arr,arr+n);
	vector<lld> hashes[n];
	for(int i=0;i<n;i++){//inv hashing
		cout<<arr[i]<<endl;
		lld v=1;
		lld h=0;
		for(int j=arr[i].size()-1;j>-1;j--){
			h+=v*arr[i].at(j);
			h%=MOD;
			v*=BASE;
			v%=MOD;
			hashes[i].push_back(h);
		}
	}vector<lld> hashes2[n];
	for(int i=0;i<n;i++){
		lld v=1;
		lld h=0;
		for(int j=0;j<arr[i].size();j++){
			h+=v*arr[i].at(j);
			h%=MOD;
			v*=BASE;
			v%=MOD;
			hashes2[i].push_back(h);
			//cout<<h<<" "<<v<<"  ";
		}//cout<<endl;
	}
	while(m--){
		string p,q;
		cin>>p>>q;
		lld hashq=0;
		lld v=1;
		for(int i=q.size()-1;i>-1;i--){
			hashq+=v*q.at(i);
			hashq%=MOD;
			v*=BASE;
			v%=MOD;
		}
		lld hashp=0;
		v=1;
		for(int i=0;i<p.size();i++){
			hashp+=v*p.at(i);
			hashp%=MOD;
			v*=BASE;
			v%=MOD;
		}
		int lo=-1;
		int hi=n;
		while(hi-lo>1){
			int mid=(lo+hi)/2;
			bool b=true;
			for(int i=0;i<p.size() && b;i++){
				if(arr[mid].size()<=i || arr[mid].at(i)<p.at(i))b=false;
			}//cout<<mid<<" "<<b<<endl;
			if(b)hi=mid;
			else lo=mid;
		}
		//cout<<lo<<" "<<hi<<" "<<p<<endl;
		int start=hi;
		lo=-1;
		hi=n;
		while(hi-lo>1){
			int mid=(lo+hi)/2;
			bool b=true;
			for(int i=0;i<p.size() && b;i++){
				if(arr[mid].size()<=i || arr[mid].at(i)<p.at(i))b=false;
			}//cout<<mid<<" "<<b<<endl;
			bool b2=true;
			for(int i=0;i<p.size();i++){
				if(arr[mid].size()<=i || arr[mid].at(i)!=p.at(i))b=false;
			}
			if(b && !b2)hi=mid;
			else lo=mid;
		}
		//cout<<lo<<" "<<hi<<endl;
		int end=lo;
		int cnt=0;
		//cout<<hashp<<endl;
		for(int i=start;i<=end;i++){
			if(hashes2[i].size()>=p.length() && hashes[i].size()>=q.length()){
				if(hashes2[i][p.length()-1]==hashp && hashes[i][q.length()-1]==hashq){
					cnt++;//cout<<i<<" ";
				}
			}
		}cout<<cnt<<endl;
		//cout<<endl;
	}
	
	return 0;
}

Compilation message

selling_rna.cpp: In function 'bool cmp(std::__cxx11::string, std::__cxx11::string)':
selling_rna.cpp:10:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<a.size() && i<b.size();i++){
              ~^~~~~~~~~
selling_rna.cpp:10:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<a.size() && i<b.size();i++){
                            ~^~~~~~~~~
selling_rna.cpp: In function 'bool cmp2(std::__cxx11::string, std::__cxx11::string)':
selling_rna.cpp:18:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<a.size() && i<b.size();i++){
              ~^~~~~~~~~
selling_rna.cpp:18:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<a.size() && i<b.size();i++){
                            ~^~~~~~~~~
selling_rna.cpp: In function 'int main()':
selling_rna.cpp:49:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0;j<arr[i].size();j++){
               ~^~~~~~~~~~~~~~
selling_rna.cpp:71:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<p.size();i++){
               ~^~~~~~~~~
selling_rna.cpp:82:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i=0;i<p.size() && b;i++){
                ~^~~~~~~~~
selling_rna.cpp:83:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(arr[mid].size()<=i || arr[mid].at(i)<p.at(i))b=false;
        ~~~~~~~~~~~~~~~^~~
selling_rna.cpp:95:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i=0;i<p.size() && b;i++){
                ~^~~~~~~~~
selling_rna.cpp:96:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(arr[mid].size()<=i || arr[mid].at(i)<p.at(i))b=false;
        ~~~~~~~~~~~~~~~^~~
selling_rna.cpp:99:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i=0;i<p.size();i++){
                ~^~~~~~~~~
selling_rna.cpp:100:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(arr[mid].size()<=i || arr[mid].at(i)!=p.at(i))b=false;
        ~~~~~~~~~~~~~~~^~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 248 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 380 ms 44544 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1566 ms 44544 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 248 KB Output isn't correct
2 Halted 0 ms 0 KB -