Submission #1380397


Source Code Expand

#include<string>
#include<deque>
#include<queue>
#include<vector>
#include<algorithm>
#include<iostream>
#include<set>
#include<cmath>
#include<tuple>
#include<map>
#include<functional>
#include<chrono>
#include<random>
#include<cmath>
using namespace std;
using namespace chrono;
typedef long long int llint;
typedef bool izryt;
#define mp make_pair
#define mt make_tuple
#define pub push_back
#define puf push_front
#define pob pop_back
#define pof pop_front
#define fir first
#define sec second
#define res resize
#define ins insert
#define era erase
template <class T,class U>void mineq(T& a,U b){if(a>b){a=b;}}
template <class T,class U>void maxeq(T& a,U b){if(a<b){a=b;}}
const int big=1e9;//Multipleの評価関数
const int n=50;
const int k=8;
const double npowda[9]={10,6,4,3.2,2.8,2.2,1.8,1.5,1.2};
const int FirSearchTime=2000;//上書きありサーチタイム
const int LasSearchTime=9800;//上書きなしサーチタイム
decltype(chrono::system_clock::now()) starttime;
std::random_device seed_gen;
mt19937 engine(seed_gen());
vector<vector<int>>grd;
vector<vector<int>>used;//どれにつかわれたかな

class pOint{
	public:int x,y;
	int grpot(void)const{return grd[y][x];}
	bool pOint::operator ==(const pOint&obj)const{return this->x==obj.x&&this->y==obj.y;}
	bool pOint::operator <(const pOint&obj)const{
	return this->grpot()<obj.grpot();
	}
};
pOint mpo(int ix,int iy){//make_pointみたいな
	pOint Po;
	Po.x=ix;
	Po.y=iy;
	return Po;
}
class pease{public:int sc;pOint mas[8];};
int getmytime(){auto nowtime=system_clock::now();
	milliseconds ret=duration_cast<milliseconds>(nowtime-starttime);
	return ret.count();
}
vector<pease>peses;//どれがどれを持っているか,sc==0ならそのピースは存在しない
int main(void){
	std::uint32_t seed = std::random_device()();
	engine.seed(seed);
	bool debug=false;
	int h,i,j,k,gen;
	cin>>h>>i>>j;//いらん
	if(j==9){debug=true;}
	pease Pe;Pe.sc=0;
	grd.res(n);used.res(n);
	for(i=0;i<8;i++){Pe.mas[i].x=0;Pe.mas[i].y=0;}
	for(i=0;i<n;i++){grd[i].res(n);used[i].res(n);}
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			char c;cin>>c;grd[i][j]=c-48;
		}
	}
	starttime=system_clock::now();
	peses.pub(Pe);//晩兵
	int timebai=1;
	if(debug){timebai*=10;}
	while(getmytime()*timebai<FirSearchTime){
		if(debug){cout<<"wrre"<<endl;}
		int X=engine()%50;
		int Y=engine()%50;
		double pownum=2;
		priority_queue<pair<int,pOint>> que;
		vector<pOint> mot;
		que.push(mp(grd[Y][X],mpo(X,Y)));
		while(mot.size()<8&&(!que.empty())){
			X=que.top().sec.x;
			Y=que.top().sec.y;
			if(mot.size()>0&&find(mot.begin(),mot.end(),mpo(X,Y))!=mot.end()){que.pop();continue;}
			mot.pub(que.top().sec);
			que.pop();
			if(Y+1<n){que.push(mp(grd[Y+1][X],mpo(X,Y+1)));}
			if(Y>0){que.push(mp(grd[Y-1][X],mpo(X,Y-1)));}
			if(X+1<n){que.push(mp(grd[Y][X+1],mpo(X+1,Y)));}
			if(X>0){que.push(mp(grd[Y][X-1],mpo(X-1,Y)));}
			//cout<<"bag"<<endl;
		}
		if(mot.size()<8){continue;}
		double nowpot=0,genpot=1;
		for(i=0;i<8;i++){genpot*=mot[i].grpot();Pe.mas[i]=mot[i];}
		Pe.sc=genpot;
		nowpot+=pow(genpot,pownum);
		//npot乗のWAで判定する
		vector<int>had;//判定済みか
		for(i=0;i<8;i++){
			if(used[mot[i].y][mot[i].x]!=0){
				if(find(had.begin(),had.end(),used[mot[i].y][mot[i].x])!=had.end()){continue;}
				nowpot-=pow(peses[used[mot[i].y][mot[i].x]].sc,pownum);
				had.pub(used[mot[i].y][mot[i].x]);
			}
		}
		if(debug){cout<<"de "<<nowpot<<endl;}
		if(nowpot<=0){continue;}
		for(i=0;i<had.size();i++){
			peses[had[i]].sc=0;
			if(debug){cout<<"i="<<had[i]<<endl;}
			for(j=0;j<8;j++){
				if(debug){cout<<" peseiti"<<peses[had[i]].mas[j].y<<" "<<peses[had[i]].mas[j].x<<endl;}
				used[peses[had[i]].mas[j].y][peses[had[i]].mas[j].x]=0;
			}
		}
		peses.pub(Pe);
		if(debug){cout<<peses.size()<<endl;}
		for(j=0;j<8;j++){used[mot[j].y][mot[j].x]=peses.size()-1;}
		if(debug){cout<<"ok"<<endl;}
	}
	if(debug){cout<<"w"<<endl;}
	int Ccount=0;
	for(i=1;i<peses.size();i++){
		if(peses[i].sc!=0){Ccount++;}
	}
	cout<<Ccount<<endl;
	for(i=1;i<peses.size();i++){
		if(peses[i].sc==0){continue;}
		for(j=0;j<8;j++){cout<<peses[i].mas[j].y+1<<" "<<peses[i].mas[j].x+1<<endl;}
	}
	return 0;
}

Submission Info

Submission Time
Task A - Multiple Pieces
User WA_TLE
Language C++14 (Clang 3.8.0)
Score 0
Code Size 4319 Byte
Status CE

Compile Error

./Main.cpp:47:14: error: extra qualification on member 'operator=='
        bool pOint::operator ==(const pOint&obj)const{return this->x==obj.x&&this->y==obj.y;}
             ~~~~~~~^
./Main.cpp:48:14: error: extra qualification on member 'operator<'
        bool pOint::operator <(const pOint&obj)const{
             ~~~~~~~^
2 errors generated.