제출 #129169

#제출 시각아이디문제언어결과실행 시간메모리
129169mahmoudbadawyLamps (JOI19_lamps)C++17
6 / 100
1075 ms4928 KiB
#include <bits/stdc++.h>

using namespace std;

string a,b;
int n;
int dis[(1<<18)];

int conv(string s)
{
	int res=0;
	for(int i=0;i<s.size();i++)
		res=res*2+(s[i]-'0');
	return res;
}

int main()
{
	cin >> n >> a >> b;
	queue<int> q;
	q.push(conv(a));
	int bb=conv(b);
	memset(dis,-1,sizeof dis);
	dis[conv(a)]=0;
	while(q.size())
	{
		int s=q.front(); q.pop();
		if(s==bb) break;
		for(int i=0;i<n;i++)
		{
			int sd=s;
			for(int j=i;j<n;j++)
			{
				sd&=(~(1<<j));
				if(dis[sd]!=-1) continue;
				dis[sd]=dis[s]+1;
				q.push(sd);
			}
		}
		for(int i=0;i<n;i++)
		{
			int sd=s;
			for(int j=i;j<n;j++)
			{
				sd|=(1<<j);
				if(dis[sd]!=-1) continue;
				dis[sd]=dis[s]+1;
				q.push(sd);
			}
		}
		for(int i=0;i<n;i++)
		{
			int sd=s;
			for(int j=i;j<n;j++)
			{
				sd^=(1<<j);
				if(dis[sd]!=-1) continue;
				dis[sd]=dis[s]+1;
				q.push(sd);
			}
		}
	}
	cout << dis[bb] << endl;
	
}

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

lamp.cpp: In function 'int conv(std::__cxx11::string)':
lamp.cpp:12:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<s.size();i++)
              ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...