JavaScript を使って削除確認ボタンを作りたいけど詰んでる
確認画面の「いいえ」を押下したら元のページに遷移するようにしたんだけど、削除処理が実行されてしまう...
以下、参考にしたサイト
Ruby on Rails で JavaScript を呼ぶ方法
Stimulusというのを使うらしい。以下のサイトが参考になった。
- まるでフロントエンドの“Rails” Hotwireを使ってJavaScriptの量を最低限に
- Stimulus に入門した(最小構成)
- Stimulus Handbookを大体やったので所感を書く
- Stimulusをはじめよう
引数を渡して JavaScript を呼ぶ方法もあった。
JavaScriptについて
完全に初心者なので、いろいろググった
URLを開く方法
以下のサイトを参考にした。
確認画面の出し方
2022/2/20追記
解決しました。event.preventDefault() を利用すれば良かったようです。解決方法の記事を書きました。
GitHubを使ってみた
Git Hubにrailsのソースコードと、自己紹介用のWebサイトをアップロードした。
自己紹介用のWebサイトの公開方法は GitHub PagesでWebページを公開する方法 | TechAcademyマガジン を参考にした。
画像の表示に違和感があるので直したい。
競プロへの取り組みの現状について
競プロ関連の記事の更新が長らく滞っています。コンテスト参加状況については、以下のリンクからご確認ください。
atcoder.jp問題ごとの提出コードは以下のリンクからご確認ください。
https://kenkoooo.com/atcoder/#/user/antomo?userPageTab=Submissions
現状、直近のコンテスト参加日が2021/12/11となっております。ネットワークスペシャリストの受験が終了次第、競プロに復帰していこうと考えております。
ネットワークスペシャリスト対策記録
午後対策
午後2対策
最近午後2の対策を始めた。これを読んでいる。良書だと思う。
午前対策はやってきたつもりだったので、基礎知識は十分だと思っていたが、実際はまだまだだったと実感した。
1問分勉強するのに3日かかりそう。8問分は勉強したいので、3/8まで午後2対策をやることになる。間に合うか?
AtCoder ABC 175 反省と D問題について
結果
A, B, C の3完だった。A と C は凡ミスで一度 WA になってしまった。残念。
D 問題の復習
問題文
記事最上部のリンク参照。
考え方
コマの移動の仕方を有向グラフに起こすと分かりやすいと思う。各マスの移動先は順列で与えられるため、グラフの頂点は出ていく辺と入ってくる辺を一本ずつ持つ。ゆえにグラフは1 つ以上のサイクルとなる。
例えばサンプル1の場合は次のような有向グラフとなる。
図
始点の選びかたと移動の回数を全探索して答えを求める。
まずは各サイクル上で適当な始点を選んだとき、1回ループまでの間に獲得する点数の最大値を計算する。ただし、 が選んだ始点の所属するループの長さより短い場合は、 ~ の間で最大の値を計算することになる。 がループの長さより大きい場合は一度サイクル上をループする間に獲得する点数の大きさに応じて、場合分けをする必要がある。
- 一度ループする間に獲得する点数の合計が 以下場合
この場合はループすればするほど点数を損するため、先ほど計算した値が最大値となる。
- 一度ループする間に獲得する点数の合計が 以上場合
この場合はループすればするほど点数を得することができる。よって、先ほど求めた値に、可能な限りループを繰り返すことによって得られるポイントを加えたものが最大値となる。
コード
#include<bits/stdc++.h> using namespace std; int main(){ int n,k;cin>>n>>k; vector<int>p(n),c(n); for(int i=0;i<n;i++){ cin>>p.at(i); p.at(i)--; } for(int i=0;i<n;i++){ cin>>c.at(i); } vector<vector<int>>G(n,vector<int>()); int64_t ans=-1e18; for(int i=0;i<n;i++){ int x=i; int64_t sum=0; int64_t tmp=0; while(1){ G.at(i).push_back(c.at(x)); sum+=c.at(x); x=p.at(x); if(x==i)break; } for(int j=0;j<k;j++){ int roop_size=G.at(i).size(); if(j>roop_size-1)break; tmp+=G.at(i).at(j); if(sum>0){ ans=max(ans,tmp+sum*((k-j-1)/roop_size)); } else{ans=max(ans,tmp);} } } cout<<ans<<endl; }