0.Pythonとしてデータ構造を用いる
53822 ワード
スタック
Pythonのスタック在庫はパンダにあります.問題は、パンダスを使うのは耳が聞こえない、イザンタ.
代わりにリストがあり、使いやすいです.- 선언
stack = []
-추가 및 삭제
stack.append(4)
stack.pop() #데이터 삭제 및 반환
- 조회
stack[-1]
- 기타
len(stack)==0 #데이터 없음
if(stack) #데이터 존재하는지 확인
len(stack) #데이터 갯수 확인
stack.clear(): 스택 비우기
#include <stack>
- 선언
stack<T> st;
- 추가 및 삭제
push(element): top에 원소를 추가
pop(): top에 있는 원소를 삭제
- 조회
top(): top(스택의 처음이 아닌 가장 끝)에 있는 원소를 반환
- 기타
empty(): 스택이 비어있으면 true 아니면 false를 반환
size(): 스택 사이즈를 반환
質問する
9093単語反転
python한 줄 그대로 읽기
s=sys.stdin.readline()
리스트에서 문자열로 특정문자를 중간중간 삽입하기
print(':'.join(stack[::-1])
import sys
sys.stdin = open("input.txt","r")
t = int(input())
for _ in range(t):
s = sys.stdin.readline()
stack=[]
for ch in s:
if(ch == ' ' or ch=='\n'):
print(''.join(stack[::-1]),end='')
stack.clear()
print(ch,end='')
else:
stack.append(ch)
文字列に関する問題を処理する場合、Stringを1回読み込むのは、逐字処理よりもずっと便利です.
取得時にgetline関数を使用する
getline関数はstringです.hとstringライブラリはそれぞれ1つあります.
cstring(string.h)のgetline関数はcharフォーマットの文字列を処理するために使用されるため、使用時にgetline(chars、streamsize n、char delim)の制限があり、delimeはその文字に達すると抽出が停止することを示す.
使用時#include <iostream>
char greeting[100];
cin.getline(greeting,10);
上記の形式を使用
逆にStringクラスのgetlineはgetline(ifstream&is、string&str、char delim)
使用時#include <string>
string greeting;
getline(cin,greeting);
上記の形式を使用
stringループ文は、文字を次のように繰り返し検索することもできます.for(char ch:str){
}
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <cstring>
#include <cstdio>
#include <functional>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <ctime>
#include <cmath>
#include <stack>
#include <string>
#define ll long long
#define len 1001
using namespace std;
int main(void) {
freopen("input.txt", "r", stdin);
int t;
scanf("%d\n", &t);
stack<char> st;
while (t--) {
string d;
getline(cin, d);
d += '\n';
for (char ch : d) {
if (ch == ' ' || ch == '\n') {
while (!st.empty()) {
printf("%c", st.top());
st.pop();
}
printf("%c", ch);
}
else {
st.push(ch);
}
}
}
}
9012かっこ
import sys
sys.stdin = open("input.txt","r")
t = int(input())
for i in range(t):
d=0
s = input()
flag = True
for j in range(len(s)):
if(s[j]=='('): d=d+1
elif(s[j]==')'): d=d-1
if(d<0):
print("NO")
flag = False
break
if(d==0 and flag): print("YES")
elif(flag): print("NO")
1874スタック数列
私たちは順番にpushとpopを使って数字を挿入しているように見えますが、これは私たちが望んでいる数列に従って押す方法、pop数字を見つける問題です.
Pythonで、文字列を特定の文字で区切る場合は「n」を選択します.join(ans)を使えばいいです.
exit(0):問題のない脱出
exit(1):問題のある終了import sys
sys.stdin = open("input.txt","r")
t = int(input())
a = [int(input()) for _ in range(t)]
st=[]
ans=""
m=0
for x in a:
if(x>m):
while(x>m):
m=m+1
st.append(m)
ans+="+"
st.pop()
ans+="-"
else:
if st[-1]!=x:
print("NO")
sys.exit(0)
st.pop()
ans+="-"
print("\n".join(ans),end="\n")
1406編集
問題はありません.リストを逆作成するときにreverse()関数を使用するだけです.
rst.RS[:-1]逆()またはリスト参照を使用してlstにすべてのデータを貼り付けます.
また、入力()は、データの両端に「n」が付加されているためです.strip()関数を使用することが望ましい.
データ入力時
list(input().strip()と[input().strip()]は別の言い方です.
list(input().strip()はアルファベット別にlistに入ります.
[input().strip()]は、文字列全体からなるリストです.
また、入力速度を速めるためsys.stdinを使ったほうがいいです.
sys.stdin.readline
sys.stdin
一般的に次のように使用されます.
input = sys.stdin.readline
lst = list(input().strip())import sys
sys.stdin = open("input.txt","r")
input = sys.stdin.readline
lst = list(input().strip())
rst = []
t = int(input())
for _ in range(t):
d = input().strip().split()
if(d[0] == "L"):
if(lst):
rst.append(lst.pop())
elif(d[0] == "D"):
if(rst):
lst.append(rst.pop())
elif(d[0]=="B"):
if(lst):
lst.pop()
elif(d[0]=="P"):
lst.append(d[1])
lst+=rst[::-1]
print("".join(lst))
キュー
PythonにQライブラリは存在しません...逆に、リストを使用して類似の機能を作成することができます.
ただし、キューではなくインデックスを使用します.リストの演算速度が速くないため、Collections import dequeからインポートされるライブラリの速度が速くなります.- 선언
queue = []
-추가 및 삭제
queue.append(4)
queue.pop(0) #데이터 삭제 및 반환
- 조회
queue[0]
- 기타
len(queue)==0 #데이터 없음
if(queue) #데이터 존재하는지 확인 -> 이게 조금 더 좋음
len(queue) #데이터 갯수 확인
queue.clear(): 큐 비우기
質問する
10845キュー
stdinは標準inputを表し,一見,input()と同じ動作を実行すると考えられる.
sys.stdin.readline()はユーザー入力を受け入れますが、開行文字入力も受け入れられます.また、入力サイズを制限することで、1回の読み取り文字数を決定することができる.
この入力=sysです.stdin.inputではなくreadlineを使用してsysを作成します.stdin.readlineは使用できますが、書き換え文字も受信します.strip(2行の文字を削除)または.rstrip(右文字を削除)を同時に使用することが望ましい.
3つの演算子が使用されています.True if x else False
import sys
sys.stdin = open("input.txt","r")
input = sys.stdin.readline
t = int(input())
queue = []
for _ in range(t):
s = input().strip().split(" ")
if(s[0] == "push"): queue.append(s[1])
elif(s[0]=="pop"):
if(queue): print(queue.pop(0))
else: print("-1")
elif(s[0]=="size"): print(len(queue))
elif(s[0]=="empty"): print("0") if queue else print("1")
elif(s[0]=="front"): print(queue[0]) if queue else print("-1")
elif(s[0]=="back"): print(queue[-1]) if queue else print("-1")
1158ジョセフス問題
ジョセフスの問題を直接リストに載せると、大きな時間制限を受けます...
そのため、今回はPythonライブラリIndiQを使ったほうがいいです.
実際、Pythonでキューを使用する場合は、できるだけインデックスを使用するのが有効です.import sys
sys.stdin = open("input.txt","r")
from collections import deque
input = sys.stdin.readline
t,m = map(int,input().rstrip().split())
q = deque()
for i in range(1,t+1):
q.append(i)
ans=[]
for i in range(t-1):
for j in range(m-1):
q.append(q.popleft())
ans+=[q.popleft()]
ans+=[q[0]]
print('<'+', '.join(map(str,ans))+'>')
デッキ
まず、インデックスは双方向接続リストで構成され、Pythonライブラリが使用されます.- 선언
from collections import deque
dq = deque()
-추가 및 삭제
dq.append(4) #오른쪽에 데이터 삽입
dq.appendleft(4) #왼쪽에 데이터 삽입
dq.pop() #오른쪽 데이터 삭제 및 반환
dq.leftpop() #왼쪽 데이터 삭제 및 반환
- 조회
queue[0]
- 기타
len(dq)==0 #데이터 없음
if(dq) #데이터 존재하는지 확인 -> 이게 조금 더 좋음
len(dq) #데이터 갯수 확인
dq.clear(): 큐 비우기
質問する
10866インデックス
import sys
sys.stdin = open("input.txt","r")
from collections import deque
input = sys.stdin.readline
t = int(input().rstrip())
dq = deque()
for _ in range(t):
s = input().rstrip().split()
if(s[0]=="push_front"): dq.appendleft(s[1])
elif(s[0]=="push_back"): dq.append(s[1])
elif(s[0]=="pop_front"):
if(dq):
print(dq.popleft())
else:
print("-1")
elif(s[0]=="pop_back"):
if(dq):
print(dq.pop())
else:
print("-1")
elif(s[0]=="size"): print(len(dq))
elif(s[0]=="empty"): print(0 if dq else 1)
elif(s[0]=="front"):
if(dq):
print(dq[0])
else:
print("-1")
elif(s[0]=="back"):
if(dq):
print(dq[-1])
else:
print("-1")
単語を逆さまにする
Reference
この問題について(0.Pythonとしてデータ構造を用いる), 我々は、より多くの情報をここで見つけました
https://velog.io/@tonyhan18/자료구조1
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
- 선언
stack = []
-추가 및 삭제
stack.append(4)
stack.pop() #데이터 삭제 및 반환
- 조회
stack[-1]
- 기타
len(stack)==0 #데이터 없음
if(stack) #데이터 존재하는지 확인
len(stack) #데이터 갯수 확인
stack.clear(): 스택 비우기
#include <stack>
- 선언
stack<T> st;
- 추가 및 삭제
push(element): top에 원소를 추가
pop(): top에 있는 원소를 삭제
- 조회
top(): top(스택의 처음이 아닌 가장 끝)에 있는 원소를 반환
- 기타
empty(): 스택이 비어있으면 true 아니면 false를 반환
size(): 스택 사이즈를 반환
한 줄 그대로 읽기
s=sys.stdin.readline()
리스트에서 문자열로 특정문자를 중간중간 삽입하기
print(':'.join(stack[::-1])
import sys
sys.stdin = open("input.txt","r")
t = int(input())
for _ in range(t):
s = sys.stdin.readline()
stack=[]
for ch in s:
if(ch == ' ' or ch=='\n'):
print(''.join(stack[::-1]),end='')
stack.clear()
print(ch,end='')
else:
stack.append(ch)
#include <iostream>
char greeting[100];
cin.getline(greeting,10);
#include <string>
string greeting;
getline(cin,greeting);
for(char ch:str){
}
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <cstring>
#include <cstdio>
#include <functional>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <ctime>
#include <cmath>
#include <stack>
#include <string>
#define ll long long
#define len 1001
using namespace std;
int main(void) {
freopen("input.txt", "r", stdin);
int t;
scanf("%d\n", &t);
stack<char> st;
while (t--) {
string d;
getline(cin, d);
d += '\n';
for (char ch : d) {
if (ch == ' ' || ch == '\n') {
while (!st.empty()) {
printf("%c", st.top());
st.pop();
}
printf("%c", ch);
}
else {
st.push(ch);
}
}
}
}
import sys
sys.stdin = open("input.txt","r")
t = int(input())
for i in range(t):
d=0
s = input()
flag = True
for j in range(len(s)):
if(s[j]=='('): d=d+1
elif(s[j]==')'): d=d-1
if(d<0):
print("NO")
flag = False
break
if(d==0 and flag): print("YES")
elif(flag): print("NO")
import sys
sys.stdin = open("input.txt","r")
t = int(input())
a = [int(input()) for _ in range(t)]
st=[]
ans=""
m=0
for x in a:
if(x>m):
while(x>m):
m=m+1
st.append(m)
ans+="+"
st.pop()
ans+="-"
else:
if st[-1]!=x:
print("NO")
sys.exit(0)
st.pop()
ans+="-"
print("\n".join(ans),end="\n")
import sys
sys.stdin = open("input.txt","r")
input = sys.stdin.readline
lst = list(input().strip())
rst = []
t = int(input())
for _ in range(t):
d = input().strip().split()
if(d[0] == "L"):
if(lst):
rst.append(lst.pop())
elif(d[0] == "D"):
if(rst):
lst.append(rst.pop())
elif(d[0]=="B"):
if(lst):
lst.pop()
elif(d[0]=="P"):
lst.append(d[1])
lst+=rst[::-1]
print("".join(lst))
PythonにQライブラリは存在しません...逆に、リストを使用して類似の機能を作成することができます.
ただし、キューではなくインデックスを使用します.リストの演算速度が速くないため、Collections import dequeからインポートされるライブラリの速度が速くなります.
- 선언
queue = []
-추가 및 삭제
queue.append(4)
queue.pop(0) #데이터 삭제 및 반환
- 조회
queue[0]
- 기타
len(queue)==0 #데이터 없음
if(queue) #데이터 존재하는지 확인 -> 이게 조금 더 좋음
len(queue) #데이터 갯수 확인
queue.clear(): 큐 비우기
質問する
10845キュー
stdinは標準inputを表し,一見,input()と同じ動作を実行すると考えられる.
sys.stdin.readline()はユーザー入力を受け入れますが、開行文字入力も受け入れられます.また、入力サイズを制限することで、1回の読み取り文字数を決定することができる.
この入力=sysです.stdin.inputではなくreadlineを使用してsysを作成します.stdin.readlineは使用できますが、書き換え文字も受信します.strip(2行の文字を削除)または.rstrip(右文字を削除)を同時に使用することが望ましい.
3つの演算子が使用されています.
True if x else False
import sys
sys.stdin = open("input.txt","r")
input = sys.stdin.readline
t = int(input())
queue = []
for _ in range(t):
s = input().strip().split(" ")
if(s[0] == "push"): queue.append(s[1])
elif(s[0]=="pop"):
if(queue): print(queue.pop(0))
else: print("-1")
elif(s[0]=="size"): print(len(queue))
elif(s[0]=="empty"): print("0") if queue else print("1")
elif(s[0]=="front"): print(queue[0]) if queue else print("-1")
elif(s[0]=="back"): print(queue[-1]) if queue else print("-1")
1158ジョセフス問題
ジョセフスの問題を直接リストに載せると、大きな時間制限を受けます...
そのため、今回はPythonライブラリIndiQを使ったほうがいいです.
実際、Pythonでキューを使用する場合は、できるだけインデックスを使用するのが有効です.
import sys
sys.stdin = open("input.txt","r")
from collections import deque
input = sys.stdin.readline
t,m = map(int,input().rstrip().split())
q = deque()
for i in range(1,t+1):
q.append(i)
ans=[]
for i in range(t-1):
for j in range(m-1):
q.append(q.popleft())
ans+=[q.popleft()]
ans+=[q[0]]
print('<'+', '.join(map(str,ans))+'>')
デッキ
まず、インデックスは双方向接続リストで構成され、Pythonライブラリが使用されます.- 선언
from collections import deque
dq = deque()
-추가 및 삭제
dq.append(4) #오른쪽에 데이터 삽입
dq.appendleft(4) #왼쪽에 데이터 삽입
dq.pop() #오른쪽 데이터 삭제 및 반환
dq.leftpop() #왼쪽 데이터 삭제 및 반환
- 조회
queue[0]
- 기타
len(dq)==0 #데이터 없음
if(dq) #데이터 존재하는지 확인 -> 이게 조금 더 좋음
len(dq) #데이터 갯수 확인
dq.clear(): 큐 비우기
質問する
10866インデックス
import sys
sys.stdin = open("input.txt","r")
from collections import deque
input = sys.stdin.readline
t = int(input().rstrip())
dq = deque()
for _ in range(t):
s = input().rstrip().split()
if(s[0]=="push_front"): dq.appendleft(s[1])
elif(s[0]=="push_back"): dq.append(s[1])
elif(s[0]=="pop_front"):
if(dq):
print(dq.popleft())
else:
print("-1")
elif(s[0]=="pop_back"):
if(dq):
print(dq.pop())
else:
print("-1")
elif(s[0]=="size"): print(len(dq))
elif(s[0]=="empty"): print(0 if dq else 1)
elif(s[0]=="front"):
if(dq):
print(dq[0])
else:
print("-1")
elif(s[0]=="back"):
if(dq):
print(dq[-1])
else:
print("-1")
単語を逆さまにする
Reference
この問題について(0.Pythonとしてデータ構造を用いる), 我々は、より多くの情報をここで見つけました
https://velog.io/@tonyhan18/자료구조1
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
- 선언
from collections import deque
dq = deque()
-추가 및 삭제
dq.append(4) #오른쪽에 데이터 삽입
dq.appendleft(4) #왼쪽에 데이터 삽입
dq.pop() #오른쪽 데이터 삭제 및 반환
dq.leftpop() #왼쪽 데이터 삭제 및 반환
- 조회
queue[0]
- 기타
len(dq)==0 #데이터 없음
if(dq) #데이터 존재하는지 확인 -> 이게 조금 더 좋음
len(dq) #데이터 갯수 확인
dq.clear(): 큐 비우기
import sys
sys.stdin = open("input.txt","r")
from collections import deque
input = sys.stdin.readline
t = int(input().rstrip())
dq = deque()
for _ in range(t):
s = input().rstrip().split()
if(s[0]=="push_front"): dq.appendleft(s[1])
elif(s[0]=="push_back"): dq.append(s[1])
elif(s[0]=="pop_front"):
if(dq):
print(dq.popleft())
else:
print("-1")
elif(s[0]=="pop_back"):
if(dq):
print(dq.pop())
else:
print("-1")
elif(s[0]=="size"): print(len(dq))
elif(s[0]=="empty"): print(0 if dq else 1)
elif(s[0]=="front"):
if(dq):
print(dq[0])
else:
print("-1")
elif(s[0]=="back"):
if(dq):
print(dq[-1])
else:
print("-1")
Reference
この問題について(0.Pythonとしてデータ構造を用いる), 我々は、より多くの情報をここで見つけました https://velog.io/@tonyhan18/자료구조1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol