Skip to content

Commit 7cd1ab2

Browse files
committed
add
1 parent e36efb2 commit 7cd1ab2

31 files changed

+804
-26
lines changed

2250.cpp

Lines changed: 38 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,20 @@
33

44
using namespace std;
55

6-
int pos[10001];
7-
int node[10001][2];
8-
int cnt;
9-
int root;
10-
int check[10001];
6+
int pos[10001]; // 중위순회를 통한 x좌표
7+
int node[10001][2]; // 트리 노드의 두 자식노드 번호
8+
int cnt; //중위순회 번호
9+
int root; // 루트노드 번호
10+
int check[10001]; // 루트노드 여부 저장
1111

12-
queue<pair<int, int> > q;
12+
queue<pair<int, int> > q; //레벨 탐색 이용할 큐
13+
void Inorder(int num) {} // 중위순회로 x좌표 구하는 함수
14+
void FindRoot() {} // 루트 노드 구하는 함수
1315

14-
void Inorder(int num) { //중위순회 함수
16+
17+
18+
19+
void Inorder(int num) {
1520

1621
if (node[num][0] != -1) {
1722
Inorder(node[num][0]);
@@ -23,10 +28,10 @@ queue<pair<int, int> > q;
2328
Inorder(node[num][1]);
2429
}
2530

26-
}
31+
}// 중위순회로 x좌표 구하는 함수
2732

2833

29-
void FindRoot() {
34+
void FindRoot() { // 루트 찾는 함수
3035

3136
for (int i = 1; i <= num; i++) {
3237
if (check[i] == 0) {
@@ -38,12 +43,13 @@ void FindRoot() {
3843

3944
int main() {
4045

41-
int num, tmp;
46+
int num, tmp; // num = 트리의 노드 수
4247
scanf("%d ", &num);
43-
for (int i = 0; i < num; i++) {
44-
scanf("%d", &tmp);
45-
scanf("%d %d", &node[tmp][0], &node[tmp][1]);
46-
if (node[tmp][1] != -1) {
48+
for (int i = 0; i < num; i++) {
49+
scanf("%d", &tmp);
50+
scanf("%d %d", &node[tmp][0], &node[tmp][1]); //자식노드 번호 저장
51+
52+
if (node[tmp][1] != -1) { // 루트 아님을 체크
4753
check[node[tmp][1]]++;
4854
}
4955
if (node[tmp][0] != -1) {
@@ -54,36 +60,42 @@ int main() {
5460
FindRoot(); // 루트를 찾음
5561
Inorder(root); // 중위순회로 pos 에 번호 저장해둠
5662

57-
q.push(make_pair(root, 1));
58-
int level = 1;
59-
int start = 1, end = 1;
60-
int Max = 0, Maxlevel = 0;
63+
q.push(make_pair(root, 1)); // 큐에 루트 번호와 레벨 1 pair로 넣어줌
6164

62-
while (!q.empty()) {
65+
int level = 1; //
66+
int start = 1, end = 1; //레벨별 가장 왼쪽, 가장 오른쪽 x좌표 저장
67+
int Max = 0, Maxlevel = 0; // 가장 너비가 넓은 레벨, 그 레벨의 너비 저장
6368

64-
if (node[q.front().first][0] != -1) {
69+
while (!q.empty()) { //큐로 레벨순으로 탐색
70+
71+
// 자식노드가 존재한다면 (!=-1) level을 1 더해서 큐에 넣어준다.
72+
if (node[q.front().first][0] != -1) {
6573
q.push(make_pair(node[q.front().first][0], q.front().second + 1));
6674
}
6775
if (node[q.front().first][1] != -1) {
6876
q.push(make_pair(node[q.front().first][1], q.front().second + 1));
6977
}
7078

71-
if (level != q.front().second) {
72-
int mid = pos[end] - pos[start] + 1;
79+
80+
if (level != q.front().second) { // 현재 레벨과 다를경우 (== 다음 레벨로 넘어왔을 경우)
81+
int mid = pos[end] - pos[start] + 1; //앞 레벨의 너비 계산
7382
/*printf("%d:%d\n", level, mid);*/
74-
if (Max < mid) {
83+
if (Max < mid) { // 현재 저장한 Max보다 넓다면 최대너비, 레벨 갱신
7584
Max = mid;
7685
Maxlevel = level;
7786
}
78-
start = q.front().first;
87+
88+
//다음 레벨 정보로 바꿔줌
89+
start = q.front().first;
7990
end = q.front().second;
8091
level++;
8192
}
82-
else {
83-
end = q.front().first;
93+
else { // 현재 레벨과 같을 경우
94+
end = q.front().first; // 오른쪽 x좌표 갱신 (무조건 더 넓어진다)
8495
}
8596
q.pop();
8697
}
98+
// 마지막 레벨의 너비 계산
8799
int mid = pos[end] - pos[start] + 1;
88100

89101
if (Max < mid) {

Untitled2.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include <stdio.h>
2+
#include <string.h>
3+
int app[100][2];
4+
int map[2][10000001];
5+
6+
int main(){
7+
int N,M;
8+
9+
scanf("%d %d",&N,&M);
10+
11+
for(int i=0;i<N;i++){
12+
scanf("%d",&app[i][0]); // °¡Ä¡
13+
}
14+
15+
for(int i=0;i<N;i++){
16+
scanf("%d",&app[i][1]); // ºñ¿ë
17+
}
18+
for(int i=1;i<=N;i++){
19+
for(int j=1;j<=M;j++){
20+
if(map[0][j]+app[i][0]<j){
21+
map[1][j]=map[0][j]+app[i][0];
22+
}else if(){
23+
24+
}else{
25+
map[1][j]=map[0][j-app[i][0]]+app[i][1]<map[0][j]?map[0][j-app[i][0]]+app[i][1]:map[0][j];
26+
}
27+
}
28+
memcpy(map[0],map[1],sizeof(map[1]));
29+
}
30+
printf("%d",map[1][M]);
31+
}

Untitled2.exe

129 KB
Binary file not shown.

Untitled3.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#include <stdio.h>
2+
#include <iostream>
3+
4+
typedef struct k{
5+
bool a;
6+
bool b;
7+
}k;
8+
int main(){
9+
k s;
10+
printf("%d",sizeof(int));
11+
}

Untitled3.exe

1.83 MB
Binary file not shown.

Untitled5.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include <stdio.h>
2+
#include <queue>
3+
#include <set>
4+
#include <cstdio>
5+
6+
using namespace std;
7+
set<int> m;
8+
priority_queue<pair<int,int> ,vector<pair<int,int> >,greater<pair<int,int> > >q;
9+
int main(){
10+
int arr[]={0,-1,0,-2,8,-2,0,-2,0};
11+
q.push(make_pair(0,0));
12+
while(!q.empty()){
13+
printf("%d %d\n",q.top().first,q.top().second);
14+
m.insert(q.top().first);
15+
if(q.top().first>=8){
16+
17+
printf("%d",q.top().second);
18+
return 0;
19+
}
20+
if(arr[q.top().first]==0){
21+
for(int i=1;i<=6;i++){
22+
if(m.find(q.top().first+i)==m.end()){
23+
q.push(make_pair(q.top().first+i,q.top().second+1));
24+
}
25+
}
26+
}else{
27+
if(m.find(q.top().first+arr[q.top().first])==m.end()){
28+
q.push(make_pair(q.top().first+arr[q.top().first],q.top().second));
29+
}
30+
}
31+
q.pop();
32+
}
33+
}

Untitled5.exe

1.55 MB
Binary file not shown.

Untitled6.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#include <stdio.h>
2+
#include <vector>
3+
#include <algorithm>
4+
#include <map>
5+
6+
using namespace std;
7+
vector<pair<int,int> > v;
8+
map<int,int> m;
9+
map<int,int> rev;
10+
int arr[10001];
11+
int ans[10001];
12+
int main(){
13+
int num;
14+
scanf("%d",&num);
15+
int tmp;
16+
for(int i=0;i<num;i++){
17+
scanf("%d",&tmp);
18+
19+
m.insert(make_pair(tmp,i));
20+
rev.insert(make_pair(i,tmp));
21+
v.push_back(make_pair(i,0));
22+
}
23+
24+
for(int i=0;i<num;i++){
25+
scanf("%d",&tmp);
26+
v[i].second = m[tmp];
27+
}
28+
29+
// sort(v.begin(),v.end());
30+
31+
int len =1;
32+
arr[0]=v[0].second;
33+
for(int i=1;i<num;i++){
34+
35+
36+
int a = upper_bound(arr,arr+len,v[i].second)-arr;
37+
arr[a]=v[i].second;
38+
if(a==len){
39+
len++;
40+
41+
for(int i=0;i<len;i++){
42+
ans[i]=arr[i];
43+
44+
}
45+
}
46+
}
47+
printf("%d\n",len);
48+
vector<int> vv;
49+
50+
for(int i=0;i<len;i++){
51+
vv.push_back(rev[ans[i]]);
52+
}
53+
sort(vv.begin(),vv.end());
54+
for(int i=0;i<len;i++){
55+
printf("%d ",vv[i]);
56+
}
57+
}

Untitled6.exe

1.58 MB
Binary file not shown.

Untitled7.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include <stdio.h>
2+
#include <vector>
3+
#include <algorithm>
4+
5+
using namespace std;
6+
vector<int> v;
7+
vector<pair<int,int> >ans;
8+
int real[1001];
9+
int main(){
10+
int num;
11+
scanf("%d",&num);
12+
int tmp;
13+
for(int i=0;i<num;i++){
14+
// for(int i=0;i<v.size();i++){
15+
// printf("%d ",v[i]);
16+
//
17+
// }
18+
// printf("\n");
19+
scanf("%d",&tmp);
20+
int lower = lower_bound(v.begin(),v.end(),tmp)-v.begin();
21+
if(lower==v.size()){
22+
v.push_back(tmp);
23+
ans.push_back(make_pair(lower,tmp));
24+
}else{
25+
v[lower]=tmp;
26+
ans.push_back(make_pair(lower,tmp));
27+
}
28+
}
29+
printf("%d\n",v.size());
30+
int cnt = v.size()-1;
31+
for(int i=ans.size()-1;i>=0;i--){
32+
if(ans[i].first==cnt){
33+
real[cnt]=ans[i].second;
34+
cnt--;
35+
if(cnt==-1){
36+
break;
37+
}
38+
}
39+
}
40+
41+
for(int i=0;i<v.size();i++){
42+
printf("%d ",real[i]);
43+
}
44+
}
45+
// 9 10 7 8 9 5
46+
// 0 1 0 1 2 0

Untitled7.exe

1.52 MB
Binary file not shown.

Untitled8.cpp

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#include <stdio.h>
2+
#include <string.h>
3+
#include <iostream>
4+
5+
typedef struct B{
6+
bool a;
7+
bool b;
8+
}B;
9+
10+
B dp[17000][17000];
11+
12+
using namespace std;
13+
14+
string str1,str2;
15+
int arr[2][17000];
16+
17+
void print(int x,int y){
18+
19+
if(x==0&&y==0){
20+
return;
21+
}
22+
if(dp[x][y].a==false&&dp[x][y].b==false){
23+
print(x-1,y-1);
24+
printf("c %c\n",str1[x-1]);
25+
}else if(dp[x][y].a==false){
26+
print(x,y-1);
27+
printf("a %c\n",str2[y-1]);
28+
}else if(dp[x][y].b==false){
29+
print(x-1,y);
30+
printf("d %c\n",str1[x-1]);
31+
32+
}else{
33+
print(x-1,y-1);
34+
printf("m %c\n",str2[y-1]);
35+
}
36+
}
37+
// 1 0 north d
38+
// 0 1 west a
39+
// 1 1 m
40+
int main(){
41+
42+
cin>>str1;
43+
cin>>str2;
44+
45+
for(int i=1;i<=str1.length();i++){
46+
dp[i][0].a = true;
47+
}
48+
49+
for(int i=1;i<=str2.length();i++){
50+
dp[0][i].b= true;
51+
arr[0][i]=i;
52+
arr[1][i]=i;
53+
}
54+
55+
56+
for(int i=1;i<=str1.length();i++){
57+
58+
59+
memcpy(arr[0],arr[1],sizeof(arr[0]));
60+
arr[0][0]=i-1;
61+
arr[1][0]=i;
62+
for(int j=1;j<=str2.length();j++){
63+
64+
if(str1[i]==str2[j]){
65+
arr[1][j]=arr[0][j-1];
66+
}else{
67+
if((arr[0][j-1]<arr[0][j])&&(arr[0][j-1]<arr[1][j-1])){//m
68+
dp[i][j].a=true;
69+
dp[i][j].b=true;
70+
arr[1][j]=arr[0][j-1]+1;
71+
}else if(arr[0][j]<arr[1][j-1]){//d
72+
73+
dp[i][j].a=true;
74+
arr[1][j]=arr[0][j]+1;
75+
}else{//a
76+
arr[1][j]=arr[1][j-1]+1;
77+
dp[i][j].b=true;
78+
}
79+
80+
81+
}
82+
}
83+
// for(int i=0;i<=str2.length();i++){
84+
// printf("%d ",arr[1][i]);
85+
// }
86+
// printf("\n");
87+
}
88+
89+
print(str1.length(),str2.length());
90+
// for(int i=0;i<str1.length();i++){
91+
// for(int j=0;j<str2.length();j++){
92+
// printf("%d ",dp[i][j]);
93+
// }
94+
// printf("\n");
95+
// }
96+
97+
}

Untitled8.exe

1.83 MB
Binary file not shown.

0 commit comments

Comments
 (0)