'분류 전체보기'에 해당되는 글 27건
- 2017.01.23 [Docker] 한국어(ko_KR) locale 설정하기
- 2016.09.30 [openGL] glDrawElements가 안될때
- 2015.12.03 [libgdx] Applying transformation with not-a-default-batch-use sprites
- 2014.12.04 Longest Common Subsequence
- 2014.12.04 Parallel Sort 1
- 2014.11.27 토너먼트 노멀 케이스 (n != 2^k)
- 2014.11.20 Tournament : Bin Packing Problem
- 2014.11.13 HIGHEST TOWER BF + TOPOL + GRAPH
- 2014.11.13 Topological Sort + Bellman Ford로 O(e) 시간에 풀기
- 2014.11.06 RACE bellman Ford
[주의] 멍청한 실수임
vbo를 랜더링 하기 전에 다음 함수들을 호출해주자
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
vbo->Render();
나는 바보다
'개발 > SFML' 카테고리의 다른 글
[SFML-랜더링] 무한 루프 스크롤 만들기 (0) | 2014.07.13 |
---|
class foo extend Actor {
...
@Override
public void draw(Batch batch, float parentAlpha) {
batch.end();
mPolygonSpriteBatch.setTransformMatrix(batch.getTransformMatrix());
mPolygonSpriteBatch.begin();
sprite.draw(mPolygonSpriteBatch);
mPolygonSpriteBatch.end();
batch.begin();
}
...
}
It is very simple, I suddenly know while I saw the core libgdx source code.
we need transformation matrix to applying it.
and the transformation matrix is automatically generated when we call the mutators
(to rotate, shift, scaling)
for Actors. and it passed by tree like manner.
so, what we have to do is just pick the transformation matrix of Actor (by batch parameter)
and applying it to the batch object whatever we want.
that's all
Longest Common Subsequence.cpp
#include <iostream>
#include <fstream>
#include <math.h>
#include <string>
#define UP 0
#define LEFT 1
#define MATCH 2
using namespace std;
int mat[100][100];
int c[100][100];
int b[100][100];
std::string x;
std::string y;
void lenlen()
{
//int &ref = cache[]
for(int i = 0; i <= x.length(); i ++)
{
c[i][0] = 0;
}
for(int i = 0; i <= y.length(); i ++)
{
c[0][i] = 0;
}
for(int i = 1; i <= x.length(); i ++)
{
for(int j = 1; j <= y.length(); j ++)
{
if(x[i - 1] == y[j - 1])
{
c[i][j] = c[i - 1][j - 1] + 1;
b[i][j] = MATCH;
}
else if(c[i - 1][j] > c[i][j - 1])
{
c[i][j] = c[i - 1][j];
b[i][j] = UP;
}
else
{
c[i][j] = c[i][j - 1];
b[i][j] = LEFT;
}
}
}
}
void print(int i, int j)
{
if(i == 0 && j == 0)
return;
if(i < 0 || j < 0)
return;
if(b[i][j] == MATCH)
{
print(i - 1, j - 1);
cout << x[i - 1];
}
else if(b[i][j] == UP)
{
print(i - 1, j);
}
else
print(i, j - 1);
}
int main()
{
fstream fin("input.txt");
int n, m;
fin >> n >> m;
fin >> x >> y;
lenlen();
cout << c[n][m] << endl;
print(n, m);
}
'공부 > 알고리즘2' 카테고리의 다른 글
Parallel Sort (1) | 2014.12.04 |
---|---|
토너먼트 노멀 케이스 (n != 2^k) (0) | 2014.11.27 |
Tournament : Bin Packing Problem (0) | 2014.11.20 |
HIGHEST TOWER BF + TOPOL + GRAPH (0) | 2014.11.13 |
Topological Sort + Bellman Ford로 O(e) 시간에 풀기 (0) | 2014.11.13 |
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int n;
int mat[100][100];
int main()
{
fstream fin("input.txt");
fin >> n;
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++)
fin >> mat[i][j];
}
int v = log((double)n) / log(2.0);
for(int iter = 0; iter < v ; iter++)// 로그엔번
{
for(int i = 0; i < n; i ++)
{
for(int k = 0; k < n; k ++)
{
for(int j = 0; j + 1 < n; j += 2)
{
if( (i % 2) == 0 && mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
else if( (i % 2) == 1 && mat[i][j] < mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
for(int j = 1; j + 1 < n; j += 2)
{
if( (i % 2) == 0 && mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
else if( (i % 2) == 1 && mat[i][j] < mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
}
}
cout << endl;
/// 수직 검사
for(int j = 0; j < n; j ++){
for(int k = 0; k < n; k ++)
{
for(int i = 0; i + 1 < n; i += 2)
{
if( mat[i][j] > mat[i + 1][j])
std::swap(mat[i][j], mat[i + 1][j]);
}
for(int i = 1; i + 1 < n; i += 2)
{
if( mat[i][j] > mat[i + 1][j])
std::swap(mat[i][j], mat[i + 1][j]);
}
}
}
}
for(int i = 0; i < n; i ++)
{
for(int k = 0; k < n; k ++)
{
for(int j = 0; j + 1 < n; j += 2)
{
if( mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
for(int j = 1; j + 1 < n; j += 2)
{
if( mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
}
}
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++)
cout << mat[i][j] << " ";
cout << endl;
}
}
'공부 > 알고리즘2' 카테고리의 다른 글
Longest Common Subsequence (0) | 2014.12.04 |
---|---|
토너먼트 노멀 케이스 (n != 2^k) (0) | 2014.11.27 |
Tournament : Bin Packing Problem (0) | 2014.11.20 |
HIGHEST TOWER BF + TOPOL + GRAPH (0) | 2014.11.13 |
Topological Sort + Bellman Ford로 O(e) 시간에 풀기 (0) | 2014.11.13 |
#include <iostream>
#include <fstream>
using namespace std;
int n, m, size;
int tree[1000];
int player[1000];
double Log2( double n )
{
// log(n)/log(2) is log2.
return log( n ) / log( 2.0 );
}
void doBin(int input)
{
int head = 1;
int s = pow(2.0, (ceil(Log2(n) + 0.5) - 1));
int offset = s + s - 1;
int LowExt = 2 * ((n - 1) - (s - 1));
while(head < n) // 찾아가기
{
if(head * 2 >= n)
break;
//if(player[tree[head * 2]] >= player[tree[head * 2 + 1]]) // 왼쪽이 더 크면
if(player[tree[head * 2]] >= input) // 왼쪽이 더 크면
{
head *= 2;
}
else
{
head = head * 2 + 1;
}
}
if(head * 2 > offset) // 최하단 레벨
{
if(player[head * 2 - (offset)] >= input) // 왼쪽이 더 크면
{
player[head * 2 - (offset)] -= input;
//tree[head] = head * 2 - (n - 1); // 왼쪽이 새엄마
}
else
{
player[head * 2 - (offset) + 1] -= input;
//tree[head] = head * 2 - (n - 1) + 1; // 오른쪽이 새엄마
}
// 리프노드 처리
if(player[head * 2 - (offset)] >= player[head * 2 - (offset) + 1]) // 왼쪽이 더 크면
{
tree[head] = head * 2 - (offset); // 왼쪽이 새엄마
}
else
{
tree[head] = head * 2 - (offset) + 1; // 오른쪽이 새엄마
}
}
else // 최하단 레벨 + 1 // k > LowExt
{
if(player[head * 2 - (n - 1) + LowExt] >= input) // 왼쪽이 더 크면
{
player[head * 2 - (n - 1) + LowExt] -= input;
//tree[head] = head * 2 - (n - 1); // 왼쪽이 새엄마
}
else
{
player[head * 2 - (n - 1) + 1 + LowExt] -= input;
//tree[head] = head * 2 - (n - 1) + 1; // 오른쪽이 새엄마
}
// 리프노드 처리
if(player[head * 2 - (n - 1) + LowExt] >= player[head * 2 - (n - 1) + LowExt + 1]) // 왼쪽이 더 크면
{
tree[head] = head * 2 - (n - 1) + LowExt; // 왼쪽이 새엄마
}
else
{
tree[head] = head * 2 - (n - 1) + LowExt + 1; // 오른쪽이 새엄마
}
}
if((n % 2 == 1) && head / 2 == (s - 1 + LowExt / 2) / 2) // 혼재된 구간
{
head = head / 2;
if(player[tree[head * 2]] >= player[head * 2 - (n - 1) + LowExt + 1]) // 왼쪽이 더 크면
{
tree[head] = tree[head * 2]; // 왼쪽이 새엄마
}
else
{
tree[head] = head * 2 - (n - 1) + LowExt + 1; // 오른쪽이 새엄마
}
}
head = head / 2;
while(head > 0) // 트리 올라가면서 복구
{
if(player[tree[head * 2]] >= player[tree[head * 2 + 1]]) // 왼쪽이 더 크면
{
tree[head] = tree[head * 2]; // 왼쪽이 새엄마
}
else
{
tree[head] = tree[head * 2 + 1]; // 오른쪽이 새엄마
}
head = head / 2;
}
for(int i = 1; i <= n; i ++)
{
cout << player[i] << " ";
}
cout << endl;
}
void init()
{
int p = -1;
int s = pow(2.0, (ceil(Log2(n) + 0.5) - 1));
int offset = s + s - 1;
int LowExt = 2 * ((n - 1) - (s - 1));
if (n % 2 == 0)
{
for (int k=1; k<=n; k=k+2) {
if(k <= LowExt)
{
p = (k +offset)/2;
}
else
{
p = (k - LowExt + n -1)/2;
}
tree[p] = k;
}
}
else { // n 이 홀수
for (int k = 1; k <= LowExt; k=k+2)
{
p = (k + offset) / 2;
tree[p] = k;
}
for(int k = LowExt + 2; k <= n; k=k+2 )
{
p = (k - LowExt + n - 1) / 2;
tree[p] = k;
}
}
for (int k = (n-1)/2; k > 0; k--)
tree[k] = tree[k * 2];
}
int main()
{
fstream fin("input.txt");
fin >> n >> m >> size;
for(int i = 1; i <= n; i ++)
{
player[i] = size;
}
init();
for(int i = 0; i < m; i ++)
{
int input;
fin >> input;
doBin(input);
}
for(int i = 1; i <= n; i ++)
{
cout << player[i] << " ";
}
cout << endl;
return 0;
}
'공부 > 알고리즘2' 카테고리의 다른 글
Longest Common Subsequence (0) | 2014.12.04 |
---|---|
Parallel Sort (1) | 2014.12.04 |
Tournament : Bin Packing Problem (0) | 2014.11.20 |
HIGHEST TOWER BF + TOPOL + GRAPH (0) | 2014.11.13 |
Topological Sort + Bellman Ford로 O(e) 시간에 풀기 (0) | 2014.11.13 |
#include <iostream>
#include <fstream>
using namespace std;
int n, m, size;
int tree[1000];
int player[1000];
void doBin(int input)
{
int head = 1;
while(head < n) // 찾아가기
{
if(head * 2 >= n)
break;
//if(player[tree[head * 2]] >= player[tree[head * 2 + 1]]) // 왼쪽이 더 크면
if(player[tree[head * 2]] >= input) // 왼쪽이 더 크면
{
head *= 2;
}
else
{
head = head * 2 + 1;
}
}
if(player[head * 2 - (n - 1)] >= input) // 왼쪽이 더 크면
{
player[head * 2 - (n - 1)] -= input;
//tree[head] = head * 2 - (n - 1); // 왼쪽이 새엄마
}
else
{
player[head * 2 - (n - 1) + 1] -= input;
//tree[head] = head * 2 - (n - 1) + 1; // 오른쪽이 새엄마
}
// 리프노드
if(player[head * 2 - (n - 1)] >= player[head * 2 - (n - 1) + 1]) // 왼쪽이 더 크면
{
tree[head] = head * 2 - (n - 1); // 왼쪽이 새엄마
}
else
{
tree[head] = head * 2 - (n - 1) + 1; // 오른쪽이 새엄마
}
head = head / 2;
while(head > 0) // 올라가면서 복구
{
if(player[tree[head * 2]] >= player[tree[head * 2 + 1]]) // 왼쪽이 더 크면
{
tree[head] = tree[head * 2]; // 왼쪽이 새엄마
}
else
{
tree[head] = tree[head * 2 + 1]; // 오른쪽이 새엄마
}
head = head / 2;
}
for(int i = 1; i <= n; i ++)
{
cout << player[i] << " ";
}
cout << endl;
}
void init()
{
int p = -1;
// 인터널 노드 아래 초기화
for (int k = 1; k <= n; k += 2)
{
p = (k + n - 1) / 2;
tree[p] = k;
}
for(int k = (n - 1) / 2 ; k > 0; k --)
{
tree[k] = tree[k * 2];
}
}
int main()
{
fstream fin("input.txt");
fin >> n >> m >> size;
for(int i = 1; i <= n; i ++)
{
player[i] = size;
}
init();
for(int i = 0; i < m; i ++)
{
int input;
fin >> input;
doBin(input);
}
for(int i = 1; i <= n; i ++)
{
cout << player[i] << " ";
}
cout << endl;
return 0;
}
'공부 > 알고리즘2' 카테고리의 다른 글
Parallel Sort (1) | 2014.12.04 |
---|---|
토너먼트 노멀 케이스 (n != 2^k) (0) | 2014.11.27 |
HIGHEST TOWER BF + TOPOL + GRAPH (0) | 2014.11.13 |
Topological Sort + Bellman Ford로 O(e) 시간에 풀기 (0) | 2014.11.13 |
RACE bellman Ford (0) | 2014.11.06 |
#include <iostream>
#include <fstream>
using namespace std;
int v, e;
struct Link
{
Link(int val, int cost)
{
this->val = val;
this->cost = cost;
next = NULL;
}
int val;
int cost;
Link *next;
};
Link* store = NULL;
Link* graph[500];
int seen[500];
int p[1000];
int d[1000];
void dfs(int i)
{
if(seen[i])
return;
seen[i] = true;
for(Link *temp = graph[i]; temp != NULL; temp = temp->next)
{
dfs(temp->val);
}
if(store == NULL)
{
store = new Link(i, 0);
}
else
{
Link *temp = store;
store = new Link(i, 0);
store->next = temp;
}
}
void topological_sort()
{
for(int i = 1; i <= v; i ++)
dfs(i);
}
void bf(int u, int v, int c)
{
if (d[v] < d[u] + c)
{
d[v] = d[u] + c;
p[v] = u;
}
}
int w[1000];
int h[1000];
int m[1000];
int main()
{
fstream fin("input.txt");
fin >> v;
for(int i = 1; i <= v; i ++)
{
int a, b, c; //
fin >> a >> b >> c;
w[i] = a;
h[i] = b;
m[i] = c;
}
for(int i = 1; i <= v; i ++)
{
if(graph[0] == NULL)
{
graph[0] = new Link(i, 0);
}
else
{
Link *temp = NULL;
for(temp = graph[0]; temp->next != NULL; temp = temp->next);
temp->next = new Link(i, 0);
}
}
for(int i = 1; i <= v; i ++)
{
for(int j = 1; j <= v; j ++)
{
if(i != j)
{
if(w[i] >= w[j] && m[i] >= m[j])
{
if(graph[i] == NULL)
{
graph[i] = new Link(j, h[i]);
}
else
{
Link *temp = NULL;
for(temp = graph[i]; temp->next != NULL; temp = temp->next);
temp->next = new Link(j, h[i]);
}
}
}
}
}
for(int i = 1; i <= v; i ++)
{
if(graph[i] == NULL)
{
graph[i] = new Link(v + 1, h[i]);
}
else
{
Link *temp = NULL;
for(temp = graph[i]; temp->next != NULL; temp = temp->next);
temp->next = new Link(v + 1, h[i]);
}
}
//for(int i = 0; i < e; i ++)
//{
// int a, b, c;
// fin >> a >> b >> c;
//
//
//}
for(int i = 0; i <= v + 1; i ++) {
d[i] = 0;
}
for(int i = 0; i <= e; i ++) {
p[i] = -1;
}
d[0] = 0;
topological_sort();
for(Link * temp= graph[0]; temp != NULL; temp = temp->next)
{
bf(0, temp->val, temp->cost);
}
for(Link * temp= store; temp != NULL; temp = temp->next)
{
for(Link * head = graph[temp->val]; head != NULL; head = head->next)
{
bf(temp->val, head->val, head->cost);
}
}
int i = v + 1;
while(true) {
i = p[i];
if(i == 0)
break;
cout << i << " ";
}
cout << endl;
cout << "height : " << d[v + 1] << endl;
}
'공부 > 알고리즘2' 카테고리의 다른 글
토너먼트 노멀 케이스 (n != 2^k) (0) | 2014.11.27 |
---|---|
Tournament : Bin Packing Problem (0) | 2014.11.20 |
Topological Sort + Bellman Ford로 O(e) 시간에 풀기 (0) | 2014.11.13 |
RACE bellman Ford (0) | 2014.11.06 |
maxflow bipar (0) | 2014.11.06 |
#include <iostream>
#include <fstream>
using namespace std;
int v, e;
struct Link
{
Link(int val, int cost)
{
this->val = val;
this->cost = cost;
next = NULL;
}
int val;
int cost;
Link *next;
};
Link* store = NULL;
Link* graph[500];
int seen[500];
int p[1000];
int d[1000];
void dfs(int i)
{
cout << i << endl;
if(seen[i])
return;
seen[i] = true;
for(Link *temp = graph[i]; temp != NULL; temp = temp->next)
{
dfs(temp->val);
}
if(store == NULL)
{
store = new Link(i, 0);
}
else
{
Link *temp = store;
store = new Link(i, 0);
store->next = temp;
}
}
void topological_sort()
{
for(int i = 1; i <= v; i ++)
dfs(i);
}
void bf(int u, int v, int c)
{
if (d[v] > d[u] + c)
{
d[v] = d[u] + c;
p[v] = u;
}
}
int main()
{
fstream fin("input.txt");
fin >> v >> e;
for(int i = 0; i < e; i ++)
{
int a, b, c;
fin >> a >> b >> c;
if(graph[a] == NULL)
{
graph[a] = new Link(b, c);
}
else
{
Link *temp = NULL;
for(temp = graph[a]; temp->next != NULL; temp = temp->next);
temp->next = new Link(b, c);
}
}
for(int i = 0; i <= v + 1; i ++) {
d[i] = 987654321;
}
for(int i = 0; i <= e; i ++) {
p[i] = -1;
}
d[0] = 0;
cout << "<--DFS Result-->" << endl;
topological_sort();
cout << "<--Topological Sort Result-->" << endl;
cout << "0" << endl;
for(Link * temp= graph[0]; temp != NULL; temp = temp->next)
{
bf(0, temp->val, temp->cost);
}
for(Link * temp= store; temp != NULL; temp = temp->next)
{
cout << temp->val << endl;
for(Link * head = graph[temp->val]; head != NULL; head = head->next)
{
bf(temp->val, head->val, head->cost);
}
}
cout << "d[i] : " << endl;
for(int i = 0; i <= v + 1; i ++){
cout << d[i] << " ";
}
cout << endl;
}
'공부 > 알고리즘2' 카테고리의 다른 글
Tournament : Bin Packing Problem (0) | 2014.11.20 |
---|---|
HIGHEST TOWER BF + TOPOL + GRAPH (0) | 2014.11.13 |
RACE bellman Ford (0) | 2014.11.06 |
maxflow bipar (0) | 2014.11.06 |
maxflow 탈출문제 (0) | 2014.11.06 |
#include <iostream>
#include <fstream>
using namespace std;
fstream fin;
int d[1000];
int p[1000];
int t[1000];
int dist[1000];
int T;
int n;
void bf(int u, int v, int c)
{
if (d[v] > d[u] + c)
{
d[v] = d[u] + c;
p[v] = u;
}
}
int main()
{
fin.open("input.txt");
fin >> T >> n;
for(int i = 1; i <= n + 1; i ++)
fin >> dist[i];
for(int i = 1; i <= n; i ++)
fin >> t[i];
t[n + 1] = 0;
for(int i = 0; i <= n; i ++) {
d[i] = 987654321;
p[i] = -1;
}
d[0] = 0;
for(int i = 0; i <= n; i ++) {
int localLen = 0;
for(int j = i + 1; j <= n + 1; j ++) {
localLen += dist[j];
if(localLen > T)
break;
bf(i, j, t[j]);
}
}
int head = n;
int sumtime = 0;
int ans[100];
int iter = 0;
while(head != 0)
{
sumtime += t[head];
ans[iter++] = head;
head = p[head];
}
cout << sumtime << endl;
cout << iter << endl;
for(int i = iter - 1; i >= 0; i --)
{
cout << ans[i] << " ";
}
cout << endl;
return 0;
}
'공부 > 알고리즘2' 카테고리의 다른 글
HIGHEST TOWER BF + TOPOL + GRAPH (0) | 2014.11.13 |
---|---|
Topological Sort + Bellman Ford로 O(e) 시간에 풀기 (0) | 2014.11.13 |
maxflow bipar (0) | 2014.11.06 |
maxflow 탈출문제 (0) | 2014.11.06 |
bfs (0) | 2014.10.16 |