제출 #768779

#제출 시각아이디문제언어결과실행 시간메모리
768779ZeroCoolDNA 돌연변이 (IOI21_dna)C++17
컴파일 에러
0 ms0 KiB
#include "dna.h"
#include <bits/stdc++.h>
#define int long long


using namespace std;

const int inf = 1e18;

struct Fenwick{
	vector<int> bit;

	Fenwick(int n){
		bit.resize(2 * n + 2,0);
	}

	void update(int i){
		for(i++;i < bit.size();i += i & -i)bit[i]++;
	}

	int get(int i){
		int ans = 0;
		for(i++;i;i -= i & -i)ans += bit[i];
		return ans;
	}
	int query(int x,int y){
		return get(y) - get(x-1);
	}
};

vector<Fenwick> fwt;

int get(char c){
	if(c == 'A')return 0;
	if(c == 'T')return 1;
	return 2;
}

void init(string A, string B) {
	int n = A.length();
	fwt.resize(9,Fenwick(n));

	for(int i = 0;i<n;i++){
		int a = get(A[i]);
		int b = get(B[i]);

		fwt[a * 3 + b].update(i);
	}
}

int32_t get_distance(int x, int y) {
	int at = fwt[1].query(x,y);
	int ac = fwt[2].query(x,y);
	int tc = fwt[5].query(x,y);
	int ta = fwt[3].query(x,y);
	int ca = fwt[6].query(x,y);
	int ct = fwt[7].query(x,y);
	int ans = 0;
	int tmp = min(at,ta);
	ans += tmp;
	at -= tmp;
	ta -= tmp;
	tmp = min(ac,ca);
	ans += tmp;
	ac -= tmp;
	ca -= tmp;
	tmp = min(tc,ct);
	ans+=tmp;
	tc-=tmp;
	ct-=tmp;
	if(ac + at + tc + ta + ca + ct == 0)return ans;
	if(!((ac && ct && ta) || (at && tc && ca)))return -1;
	if(ac){
		if(ac != ct || ac != ta)return -1;
		ans += ac*2;
	}else{
		if(ca != tc || ca != at)return -1;
		ans += ca*2;
	}
	return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

dna.cpp: In member function 'void Fenwick::update(long long int)':
dna.cpp:18:13: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |   for(i++;i < bit.size();i += i & -i)bit[i]++;
      |           ~~^~~~~~~~~~~~
/usr/bin/ld: /tmp/ccAIvhUM.o: in function `main':
grader.cpp:(.text.startup+0x39d): undefined reference to `get_distance(int, int)'
collect2: error: ld returned 1 exit status