React: Material UI でヘッダーの右端にアイコンを表示する。
・参考:
・ReactのMaterial-UIで、右揃えの要素を作るには | Kanchiの雑記帳
・【初心者】#1 Reactの基礎とMaterial-UI使って綺麗に作ってみる #JavaScript - Qiita
・説明:
<div style={{ flexGrow: 1 }}></div>
を使えば良い。具体的には下のコードのHeader.jsxを参照。
import React from "react"; import AppBar from "@mui/material/AppBar"; import Toolbar from "@mui/material/Toolbar"; import Typography from "@mui/material/Typography"; import AccountCircleIcon from "@mui/icons-material/AccountCircle"; const Header = () => { return ( /* ヘッダーを上に固定*/ <AppBar position="static"> {/*Toolbarが青い線*/} <Toolbar> <Typography>ヘッダー</Typography> {/*右寄せ*/} <div style={{ flexGrow: 1 }}></div> <Typography> <AccountCircleIcon /> </Typography> </Toolbar> </AppBar> ); }; export default Header;
atcoder ABC 325 C - SensorsのPythonでの説明
・説明
C - Cross
の類題をもとにして解ける。この問題は隣接した'#'の数を求める問題なのでこの問題のDFSを今考えている問題のマス全てで行い、隣接する'#'の数をansにappendする。答えはlen(ans)になる。
import sys sys.setrecursionlimit(10**6) H,W=map(int,input().split()) map=[list(input()) for _ in range(H)] #隣接した'#'の数を求めるDFS。 #例えばcnt += dfs(y2, x2)はy3, x3 = y2 + dy, x2 + dx,,,,とするとy3,x3までdfsじた場合、つまり#が3個のときはcnt=cnt+dfs(y2,x2) = cnt+cnt+dfs(y3,x3) = cnt+cnt+1 (return 1より) = 3となる(cnt=1より)。 def dfs(x, y): cnt=1 if map[x][y] == "#": map[x][y] = "." for dx in range(-1,2): for dy in range(-1,2): nx = x + dx ny = y + dy if 0 <= nx < H and 0 <= ny < W and map[nx][ny] == "#": cnt+=dfs(nx,ny) return cnt #ansに'#'の個数を入れていく。答えがlen(ans)になる。 ans=[] for i in range(H): for j in range(W): if map[i][j]=='.': continue ans.append(dfs(i,j)) print(len(ans))
atcoder ABC 323 C - World Tour Finalsの説明
・説明
'o'の問題は再び使えないので、累積和とbisectだと無理。xのものを抽出して、それをmaxのものと引き算してマイナスになるまでやる。
・失敗例
def II(): return int(input()) def MI(): return map(int, input().split()) def LI(): return list(map(int, input().split())) def LS(): return list(map(str, input().split())) n,m=MI() a=LI() s=[input() for _ in range(n)] import bisect cnt=[i+1 for i in range(n)] #print(s) for i in range(n): for j in range(m): if s[i][j]=='o': cnt[i]+=a[j] a.sort(reverse=True) ruiseki=[0] for i in range(m): tmp=a[i]+ruiseki[i] ruiseki.append(tmp) ma=max(cnt) for i in range(n): if cnt[i]==ma: print(0) continue sa=abs(cnt[i]-ma) bir=bisect.bisect_right(ruiseki,sa) print(bir)
・AC例
def II(): return int(input()) def MI(): return map(int, input().split()) def LI(): return list(map(int, input().split())) def LS(): return list(map(str, input().split())) n,m=MI() a=LI() s=[input() for _ in range(n)] cnt=[i+1 for i in range(n)] #点数 flag=[[] for _ in range(n)] #xのものを入れる #'x'のものを抽出する。 for i in range(n): for j in range(m): if s[i][j]=='o': cnt[i]+=a[j] if s[i][j]=='x': flag[i].append(a[j]) ma=max(cnt) for i in range(n): if cnt[i]==ma: print(0) continue sa=abs(cnt[i]-ma) #これがマイナスになるまで'x'のものを引き算する。 flag[i].sort(reverse=True) ans=0 for f in flag[i]: if sa<0: break sa-=f ans+=1 print(ans)
Python 安定ソート atcoder ABC323 B - Round-Robin Tournament
・参考
docs.python.org
・説明
2次元のリストにおいて、普通のソートと安定ソートを使った場合で比べる。降順のときは変わらないが昇順のときは2列目の値が小さいのから先に並び替える。
・例
ans=[[3, 0], [1, 1], [4, 2], [5, 3], [3, 4], [0, 5], [5, 6]] #普通のソート。 ans.sort() #[[0, 5], [1, 1], [3, 0], [3, 4], [4, 2], [5, 3], [5, 6]] ans.sort(reverse=True) #[[5, 6], [5, 3], [4, 2], [3, 4], [3, 0], [1, 1], [0, 5]] #安定ソート。 from operator import itemgetter ans=sorted(ans, key=itemgetter(0), reverse=True) #ansの0列に対して大きい順に並べて、同じ時ansの1列を見て小さい方を先に並び替える。 #[[5, 3], [5, 6], [4, 2], [3, 0], [3, 4], [1, 1], [0, 5]] ans=sorted(ans, key=itemgetter(0)) #ansの0列に対して小さい順に並べて、同じ時ansの1列を見て大きい方を先に並び替える。 #[[0, 5], [1, 1], [3, 0], [3, 4], [4, 2], [5, 3], [5, 6]]
・例題
atcoder.jp
・例題の実装例
n=int(input()) from operator import itemgetter cnt_idx=[i for i in range(n)] cnt=[0]*n for i in range(n): ox=input() for j in range(n): if ox[j]=='o': cnt[i]+=1 ans=[] for i in range(n): ans.append([cnt[i], cnt_idx[i]]) ans=sorted(ans, key=itemgetter(0), reverse=True) for i in range(n): print(ans[i][1]+1, end=" ")
Java Enumの勉強。values()とか。
・説明
JavaのEnumについて具体的にプログラムを動かしながら勉強した。プログラムの説明は定数がApple, Orang, Grapeとあり、この色と数字をgetColor, getNumberで取得できることを確認する。またvalue()を使うと定数が取ってこれることも確認した。
・実装
//Fruits.java public enum Fruits{ Apple("赤",0), Orange("橙",1), Grape("青",2); private final String color; //色。Appleだと赤。 private final int number; //内部変数。Appleだと0。 private Fruits(String color,int number){ this.color=color; this.number=number; } //フィールドのcolorを返す. public String getColor(){ return this.color; } public int getNumber(){ return this.number; } }
//メイン //testMain.java public class testMain { public static void main(String[] args) { for (int i=0;i<3;++i){ System.out.println(Fruits.values()[i]); //values()[0]はApple, values()[1]はOrange,,,となる。 } //Apple System.out.println(Fruits.Apple.getColor()); //.Apple.getColorでAppleの色、つまり赤をとってくる。 System.out.println(Fruits.Apple.getNumber()); //Appleのnumberの0をとってくる。 //Orange System.out.println(Fruits.Orange.getColor()); System.out.println(Fruits.Orange.getNumber()); //Grape System.out.println(Fruits.Grape.getColor()); System.out.println(Fruits.Grape.getNumber()); } } //出力 //Apple //Orange //Grape //赤 //0 //橙 //1 //青 //2
atcoder ABC 321 C - 321-like Searcherの説明
・説明
"9876543210"が最大の答えになるのでこれ以下の値を列挙する。今回はitertoolsのcombinationsを使った。
from itertools import combinations k=int(input()) C=[9,8,7,6,5,4,3,2,1,0] ans=[] for i in range(1,11): for c in combinations(C,i): #例えば{9,8}を98という値にして、ansにappendする。 tmp=0 for cc in c: tmp=tmp*10+cc ans.append(tmp) ans.sort() print(ans[k])
atcoder ABC320 E - Somen Nagashi のSortedListを使った実装
・参考
トヨタ自動車プログラミングコンテスト2023#5(AtCoder Beginner Contest 320) - YouTube
Sorted List — Sorted Containers 2.4.0 documentation
・説明
SortedListを使うことで先頭の要素(昇順になっているので最小値)をpop(0)を使い、O(log (N))で取得できる。普通のリストではpopに引数を付けるとO(N)になり、TLEになる。他にもheapqやdequeを使うことで解くことができるがSortedListが楽だと思う。
プログラムの説明は今、列にいる人をorder、列から外れた人をt_whoで管理して、T以下の時間のものをorderに戻す。詳しい説明はコメントアウトしている。
from sortedcontainers import SortedList n,m=map(int,input().split()) ans=[0 for _ in range(n)] order=SortedList([i for i in range(n)]) #列にいる人の順番. t_who=SortedList() #(時間,何番目の人)を追加していく、何番目の人がどの時間に列に戻るか表す。 for _ in range(m): t,w,s=map(int,input().split()) while len(t_who)!=0: tt,who=t_who.pop(0) #t_whoからt以下の時間の人を列orderに戻す. if tt<=t: order.add(who) #そうでなかったら、popしたものをもとに戻してbreak. else: t_who.add((tt,who)) break if len(order)==0: continue p=order.pop(0) #そうめんを食べる人. ans[p]+=w t_who.add((t+s,p)) for i in range(n): print(ans[i])