AtCoder Beginner Contest 250で失敗しました
AtCoder Beginner Contestでまた大失敗をしました。
失敗したのはC問題です。
C.
こういう、データ構造作ってみよう的な問題で、考察が深まる前に突っ走ってしまうため、実装がごちゃごちゃして失敗することよくあるんですよね...
C問題に時間をかけすぎたせいで時間内ACはできませんでしたが、D問題の方が得意だったりします...
D.
というかD問題、終了3分後に解けたんですよね...悔しい...
めちゃくちゃ悔しかったので、C問題のような問題で使えるデータ構造を作って、ライブラリに入れておこうと思い、作ってみました。
struct multi_list{
multi_list(int n,int m) : list(n),cont(n) {
if(m==0) {
for(int i=0;i<n;i++){
list[i] = i;
cont[i] = i;
}
}
}
void cont_swap(int a,int b){
swap(list[cont[a]],list[cont[b]]);
swap(cont[a],cont[b]);
}
void idx_swap(int i,int j){
int a,b;
a = list[i];b = list[j];
swap(list[i],list[j]);
swap(cont[a],cont[b]);
}
void print(){
for(int i=0;i<list.size();i++){
cout << list[i]+1 << " ";
}
cout << endl;
}
void sort(){
std::sort(list.begin(),list.end());
for(int i=0;i<list.size();i++) cont[list[i]] = i;
}
};
リストの要素から指定して、要素にアクセスできる、swapできる構造です。というか、C問題ほとんどそのままですね...
正直、実用性は皆無ですが、次似たような問題が出たら、爆速でできるようにしておきたいと思います。