제출 #1363812

#제출 시각아이디문제언어결과실행 시간메모리
1363812yyc000123Chika Wants to Cheat (EGOI22_cheat)C++20
53 / 100
3 ms836 KiB
#include<bits/stdc++.h>
using namespace std ;
#define F first
#define S second
const int Q = 1e4+5 ;
const int N = 67000005 ;
vector<pair<pair<int,int>,pair<int,int>>> edges = {
    {{0,0},{1,0}} , {{0,0},{1,1}} , {{0,0},{1,2}} , {{0,0},{2,1}} ,
    {{0,1},{0,2}} , {{0,1},{1,0}} , {{0,1},{1,1}} , {{0,1},{1,2}} , {{0,1},{2,0}} , {{0,1},{2,2}} ,
    {{0,2},{1,0}} , {{0,2},{1,1}} , {{0,2},{2,1}} ,
    {{1,0},{1,1}} , {{1,0},{2,1}} , {{1,0},{2,2}} ,
    {{1,1},{1,2}} , {{1,1},{2,0}} , {{1,1},{2,1}} , {{1,1},{2,2}} ,
    {{1,2},{2,0}} , {{1,2},{2,1}} , {{1,2},{2,2}} ,
    {{2,0},{2,1}} ,
    {{0,2},{1,2}} , {{2,1},{2,2}} , 
} ;
vector<pair<pair<int,int>,pair<int,int>>> v ;

vector<pair<pair<int,int>,pair<int,int>>> BuildPattern(int n){
    vector<pair<pair<int,int>,pair<int,int>>> ans ;
    ans.push_back({{0,0},{0,1}}) ;
    for(int i=0 ; i<24 ; i++){
        if((n>>i)&1) ans.push_back(edges[i]) ;
    }
    if(n>=(1<<24)) ans.push_back(edges[24]) ;
    if(n>=(1<<25)) ans.push_back(edges[25]) ;
    return ans ;
}

pair<int,int> f(int x , int y){
    if(x==0 && y==0) return {2,0} ;
    if(x==0 && y==1) return {1,0} ;
    if(x==0 && y==2) return {0,0} ;
    if(x==1 && y==0) return {2,1} ;
    if(x==1 && y==1) return {1,1} ;
    if(x==1 && y==2) return {0,1} ;
    if(x==2 && y==0) return {2,2} ;
    if(x==2 && y==1) return {1,2} ;
    if(x==2 && y==2) return {0,2} ;
}

void rotate(){
    for(int i=0 ; i<v.size() ; i++){
        pair<int,int> a = v[i].F , b = v[i].S ;
        a = f(a.F,a.S) , b = f(b.F,b.S) ;
        v[i] = {a,b} ;
    }
}

int GetCardNumber(vector<pair<pair<int,int>,pair<int,int>>> v1){
    v = v1 ;
    int a = 0 , b = 0 , c = 0 , d = 0 ;
    pair<pair<int,int>,pair<int,int>> pa = {{0,0},{0,1}} , pb = {{0,2},{1,2}} , pc = {{2,1},{2,2}} , pd = {{1,0},{2,0}} ;
    for(auto it:v){
        auto it1 = it ; swap(it1.F,it1.S) ;
        if(it==pa || it1==pa) a = 1 ;
        if(it==pb || it1==pb) b = 1 ;
        if(it==pc || it1==pc) c = 1 ;
        if(it==pd || it1==pd) d = 1 ;
    }
    if(!a && b) rotate() ;
    else if(!b && c) rotate() , rotate() ;
    else if(!c && d) rotate() , rotate() , rotate() ;
    int ans = 0 ;
    for(auto it:v){
        auto it1 = it ; swap(it1.F,it1.S) ;
        for(int i=0 ; i<26 ; i++){
            if(edges[i]==it || edges[i]==it1) ans|=(1<<i) ;
        }
    }
    return ans ;
}

/*
int main(){
    for(int i=1 ; i<=25 ; i++) cout << GetCardNumber(BuildPattern(i)) << '\n' ; //
    return 0 ;
}
*/

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

cheat.cpp: In function 'std::pair<int, int> f(int, int)':
cheat.cpp:40:1: warning: control reaches end of non-void function [-Wreturn-type]
   40 | }
      | ^
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…