オセロ
#include <stdio.h>
#define MaxW 128
void extract_T_preparation(char T[][MaxW], int H, int W, int *minH, int *maxH, int *minW, int *maxW){
for(int i=0; i<H; i++){
for(int j=0; j<W; j++){
if(T[i][j]=='#'){
if(i < *minH){ *minH=i;}
if(*maxH < i){ *maxH=i;}
if(j < *minW){ *minW=j;}
if(*maxW < j){ *maxW=j;}
}
}
}
}
void extract_T(char T[][MaxW], char extractT[][MaxW], int *minH, int *maxH, int *minW, int *maxW){
for(int i=*minH; i<*maxH+1; i++){
for(int j=*minW; j<*maxW+1; j++){
extractT[i-*minH][j-*minW]=T[i][j];
}
}
}
void rotate_90T(char extractT[][MaxW], char rotate90T[][MaxW], int *extractT_H, int *extractT_W){
for(int i=0; i<*extractT_H; i++){
for(int j=0; j<*extractT_W; j++){
rotate90T[j][*extractT_H-i-1]=extractT[i][j];
}
}
}
int check(char S[][MaxW], char checkT[][MaxW], int H, int W, int extractT_H, int extractT_W){
int check_fault_flg = 0;
if(H<extractT_H || W<extractT_W){
return 0;
}
for(int i=0; i<H-extractT_H+1;i++){
for(int j=0; j<W-extractT_W+1; j++){
for(int extractT_i=0; extractT_i<extractT_H; extractT_i++){
for(int extractT_j=0; extractT_j<extractT_W; extractT_j++){
if(S[i+extractT_i][j+extractT_j]=='#' && checkT[extractT_i][extractT_j]=='#'){
check_fault_flg=1;
break;
}
}
if(check_fault_flg==1){
break;
}
}
if(check_fault_flg==1){
check_fault_flg=0;
}else{
return 1;
}
}
}
return 0;
}
int main(void){
int H, W;
scanf("%d %d", &H, &W);
char S[H][MaxW];
char T[H][MaxW];
for(int i=0; i<H; i++){
scanf("%s", S[i]);
}
for(int i=0; i<H; i++){
scanf("%s", T[i]);
}
int minH=128;
int maxH=-1;
int minW=128;
int maxW=-1;
extract_T_preparation(T, H, W, &minH, &maxH, &minW, &maxW);
int extractT_H=maxH - minH + 1;
int extractT_W=maxW - minW + 1;
char extractT[extractT_H][MaxW];
extract_T(T, extractT, &minH, &maxH, &minW, &maxW);
// 0, 90, 180, 270度回転させて確認
int flag = check(S, extractT, H, W, extractT_H, extractT_W);
if(flag) {printf("Yes\\n"); return 0;}
char rotated90T[extractT_W][MaxW];
rotate_90T(extractT, rotated90T, &extractT_H, &extractT_W);
flag = check(S, rotated90T, H, W, extractT_W, extractT_H);
if(flag) {printf("Yes\\n"); return 0;}
char rotated180T[extractT_H][MaxW];
rotate_90T(rotated90T, rotated180T, &extractT_W, &extractT_H);
flag = check(S, rotated180T, H, W, extractT_H, extractT_W);
if(flag) {printf("Yes\\n"); return 0;}
char rotated270T[extractT_W][MaxW];
rotate_90T(rotated180T, rotated270T, &extractT_H, &extractT_W);
flag = check(S, rotated270T, H, W, extractT_W, extractT_H);
if(flag) {printf("Yes\\n"); return 0;}
printf("No\\n");
return 0;
}
リーディングゼロ
6
1111111111111111111111
0001
0000001
0000000001
0000000000001
0000000000000001
#include <stdio.h>
long long int atoi(char *str) {
long long int i, n = 0;
for (i = 0; str[i] >= '0' && str[i] <= '9'; i++) {
n = n * 10 + (str[i] - '0');
}
return n;
}
int count_zero(char str[128]){
int count=0;
while(*str=='0'){
count++;
str++;
}
return count;
}
void swap(char str[][128], int swap_i, int swap_j){
char tmp[128] = {"0"};
for(int i=0; i<128; i++){
tmp[i] = str[swap_i][i];
}
for(int i=0; i<128; i++){
str[swap_i][i] = str[swap_j][i];
}
for(int i=0; i<128; i++){
str[swap_j][i] = tmp[i];
}
}
void sorting(char str[][128], int N){
unsigned long long min_num=1844674407370955161;
int zero_max_count=0;
long long int tmp_num, tmp_zero_count;
int cur_i, cur_j;
char *tmp_str;
// 選択ソート
for(int i=0; i<N-1; i++){
min_num=1844674407370955161;
zero_max_count=0;
for(int j=i; j<N; j++){
// tmp_str = reading_zero(str[j]);
tmp_num = atoi(str[j]);
tmp_zero_count = count_zero(str[j]);
// printf("tmp_num;%d, tmp_zero_count:%d\\n", tmp_num, tmp_zero_count);
if(tmp_num < min_num){
min_num = tmp_num;
zero_max_count = tmp_zero_count;
cur_i = i;
cur_j = j;
}else if(tmp_num==min_num && zero_max_count < tmp_zero_count){
min_num = tmp_num;
zero_max_count = tmp_zero_count;
cur_i = i;
cur_j = j;
}
}
// puts("");
swap(str, cur_i, cur_j);
// printf("cur_i:%d, cur_j:%d\\n", cur_i, cur_j);
}
}
int main() {
int N;
char str[N][128];
scanf("%d", & N);
for(int i=0; i<N; i++){
scanf("%s", str[i]);
};
puts("");
sorting(str, N);
// swap(str, 0, 1);
for(int i=0; i<N; i++){
printf("%s\\n", str[i]);
};
}