#include <stdio.h>
#include <string.h>
int max(int a, int b)
{
if(a>b) return a;
else return b;
}
int palindrome(const char* s, int left, int right)
{
int answer=0, len;
len=strlen(s);
while(left>=0&&right<len) {
if(s[left]==s[right]) {
left--;
right++;
answer+=2;
}
else break;
}
return answer;
}
int solution(const char* s) {
int i, a=0, b=0, answer=1, len;
len=strlen(s);
for(i=0;i<len;i++) {
if(len==1) answer=1;
else {
answer=max(palindrome(s, i, i+1), palindrome(s, i, i+2));
printf("%d ", answer+1);
}
//answer=palindrome(s, i, i+1);
//answer=palindrome(s, i, i+2);
}
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
int solution(char* s) {int answer = 0;int length = strlen(s);int i, subLength, left, right;for(i=0;i<length;i++) {for(subLength = length;subLength>answer;subLength--) {left = i;right = i + subLength - 1;while(left<right && s[left] == s[right]) {left++;right--;}if(left>=right && answer < subLength) {answer = subLength;}}}return answer;}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MAX(a, b) (a>b)?(a):(b)
int map[2500][2500];int match(char *arr, int s, int e){if(s>=e) return 0;int left = s, right = e;int count = 0;if(map[s][e] !=0) return map[s][e];while(left<right) {if(arr[left]==arr[right]) {count++;left++;right--;}else break;}if(left == right)return count*2+1;else if (left > right)return count*2;elsereturn map[s][e] = MAX(match(arr, s+1, e), match(arr, s, e-1));}int solution(char* s) {int answer = 0;int len = strlen(s);answer = match(s, 0, len-1);return answer==0?1:answer;}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// a_len은 배열 a의 길이입니다.// edges_rows는 2차원 배열 edges의 행 길이, edges_cols는 2차원 배열 edges의 열 길이입니다.typedef struct node{int u;int v;}no;no map[6000000+10];long long sum[3000000+10];int count[3000000+10];int visit[3000000+10];long long answer = 0;int compare(const void *a, const void *b){no *temp1 = (no *)a;no *temp2 = (no *)b;if(temp1->u> temp2->u)return 1;else if(temp1->u < temp2->u)return -1;else{if(temp1->v > temp2->v)return 1;else if(temp1->v < temp2->v)return -1;elsereturn 0;}}void DFS(int node, int parent){int start=0;if(node!=0)start = count[node-1];visit[node]=1;for(int i=start;i< count[node];i++){if(visit[map[i].v]!= 1)DFS(map[i].v, map[i].u);}sum[parent] = sum[parent]+sum[node];answer = answer+llabs(sum[node]);// printf("node:%d sum[%d]:%lld",node, parent, sum[parent]);}long long solution(int a[], size_t a_len, int** edges, size_t edges_rows, size_t edges_cols) {int j=0;long long total=0;for(int i=0;i< a_len;i++){sum[i] = a[i];total = total +sum[i];}if(total !=0)return -1;for(int i=0;i< edges_rows;i++){map[j].u = edges[i][0];map[j].v = edges[i][1];count[map[j].u]++;j++;map[j].u = edges[i][1];map[j].v = edges[i][0];count[map[j].u]++;j++;}//printf("%d",j);qsort(map, j, sizeof(no),compare);for(int i=1;i< a_len+1;i++)count[i] = count[i]+count[i-1];visit[0]=1;DFS(0,0);// for (int i = 0; i < a_len; i++)// if(sum[i]!=0)// answer=-1;return answer;}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
//Memory allocation requires a lot of time in this system.//To avoid timeout, strange design is adopted.#define MAX_A_LEN (300000)
struct list{int idx;struct list* next;};struct list* processed_edges[MAX_A_LEN];int visited[MAX_A_LEN];struct list unused_edges[2 * MAX_A_LEN];//Not to use malloc. The number of edges is a_len - 1 but as it is bidirectional it requires at least 2 * (a_len - 1)int idx_unsed_edge;long long dfs(int idx, int a[], struct list* p_edges[], int* visited, long long* couple){long long cur_a = a[idx], change = 0;visited[idx] = 1;for(struct list* node = p_edges[idx]; node; node = node -> next)if(!visited[node -> idx])change += dfs(node -> idx, a, p_edges, visited, &cur_a);*couple += cur_a;return change + llabs(cur_a);}long long solution(int a[], size_t a_len, int** edges, size_t edges_rows, size_t edges_cols) {long long answer, root_value = 0;for(size_t i = 0; i < edges_rows; i++){unused_edges[idx_unsed_edge].idx = edges[i][1];unused_edges[idx_unsed_edge].next = processed_edges[edges[i][0]];processed_edges[edges[i][0]] = &unused_edges[idx_unsed_edge++];unused_edges[idx_unsed_edge].idx = edges[i][0];unused_edges[idx_unsed_edge].next = processed_edges[edges[i][1]];processed_edges[edges[i][1]] = &unused_edges[idx_unsed_edge++];}answer = dfs(0, a, processed_edges, visited, &root_value);return root_value == 0 ? answer : -1;}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int* solution(int n) {int index = 0;for(int i = 0; i <=n; i++){index+= i;}int* answer = (int*)malloc(index *sizeof(int)); // 이 문제는 3가지 패턴으로 구성되어 있다.int direct_pattern = 1; //1. 방향성 패턴 : 방향이 바뀔때마다 한 방향에 주어지는 주소값 갯수는 1개씩 줄어드므로 이 것을 구현해야 한다.int continue_pattern = 1; //2. 지속성 패턴 : 방향이 바뀌기 전, 적용되는 동일한 패턴.int continue_pattern_buffer = 0;int continue_end = n; // 지속성 패턴이 끝나는 시점. 지속성 패턴이 끝나면 1개씩 빼준다.int cycle_pattern = 0; //3. 사이클 패턴 : 방향이 한바퀴를 돌때, 주소 관련 패턴이 바뀌므로 이 변수로 변함을 적용.// 싸이클 패턴 첫 적용값은 2이므로 식을 자동으로 굴리려면 초기값을 1로 박아, 연산 후 2를 다음 반복문에 적용한다.int value = 1; // 반복문으로 주소값만 방향성에 따라 바꾸고 값은 1씩만 증가시켜 주소에 넣어준다.int address = 0; //최종 적용되는 주소값.for(int i = 0; i < n ;i++){ //i는 주소값 증가와 value값 증가이다.int temp[n];for(int j = 0; j < continue_end;j++){if(direct_pattern%3 == 1){continue_pattern = j == 0 ? continue_pattern + cycle_pattern : continue_pattern; // 최초 시작시 싸이클 패턴 더해주고... 2싸이클부터는 돌아가나? 뭐하지?continue_pattern = j != 0 ? continue_pattern + j + cycle_pattern : continue_pattern;address = continue_pattern;}else if(direct_pattern%3 == 2){ // 싸이클 패턴 필요 없음.continue_pattern++;address = continue_pattern;}else if(direct_pattern%3 == 0){ // 싸이클 패턴 필요 없음.continue_pattern = continue_pattern - (n - cycle_pattern/2 - j);address = continue_pattern;}//address = address + continue_pattern; //변경된 패턴을 주소에 더 한다.*(answer + address - 1) = value; //패턴이 적용된 주소에 새 value값을 적용한다.value++;}cycle_pattern = direct_pattern % 3 == 0 ? cycle_pattern+2 : cycle_pattern; //방향성 패턴이 value = 1로 회귀전, cycle_pattern증가.(2개씩)direct_pattern = direct_pattern % 3 == 0 ? direct_pattern /3: direct_pattern + 1; //방향성 패턴이 4가 되면, value = 1로 회귀.continue_end--; //지속성 패턴 초기화.}//*answer = *(answer+2);return answer;}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int* solution(int n) {// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.int* answer = (int*)calloc(n * (n+1) / 2, sizeof(int));int temp[n][n];int re = n;int col = 0, row = -1;int a = 0, b = 0, c = 0, num = 0;for(a = 0;a < re;a++){b = re - a;if(c % 3 == 0){while (b-- > 0)temp[++row][col] = ++num;}else if(c % 3 == 1){while (b-- > 0)temp[row][++col] = ++num;}else{while (b-- > 0)temp[--row][--col] = ++num;}c++;}int count = 0;for(int i = 0;i < n;i++){for(int j = 0;j <= i;j++)answer[count++] = temp[i][j];}return answer;}