tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
51
Task/Ordered-Partitions/C/ordered-partitions-1.c
Normal file
51
Task/Ordered-Partitions/C/ordered-partitions-1.c
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int next_perm(int size, int * nums)
|
||||
{
|
||||
int *l, *k, tmp;
|
||||
|
||||
for (k = nums + size - 2; k >= nums && k[0] >= k[1]; k--) {};
|
||||
if (k < nums) return 0;
|
||||
|
||||
for (l = nums + size - 1; *l <= *k; l--) {};
|
||||
tmp = *k; *k = *l; *l = tmp;
|
||||
|
||||
for (l = nums + size - 1, k++; k < l; k++, l--) {
|
||||
tmp = *k; *k = *l; *l = tmp;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void make_part(int n, int * sizes)
|
||||
{
|
||||
int x[1024], i, j, *ptr, len = 0;
|
||||
|
||||
for (ptr = x, i = 0; i < n; i++)
|
||||
for (j = 0, len += sizes[i]; j < sizes[i]; j++, *(ptr++) = i);
|
||||
|
||||
do {
|
||||
for (i = 0; i < n; i++) {
|
||||
printf(" { ");
|
||||
for (j = 0; j < len; j++)
|
||||
if (x[j] == i) printf("%d ", j);
|
||||
|
||||
printf("}");
|
||||
}
|
||||
printf("\n");
|
||||
} while (next_perm(len, x));
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int s1[] = {2, 0, 2};
|
||||
int s2[] = {1, 2, 3, 4};
|
||||
|
||||
printf("Part 2 0 2:\n");
|
||||
make_part(3, s1);
|
||||
|
||||
printf("\nPart 1 2 3 4:\n");
|
||||
make_part(4, s2);
|
||||
|
||||
return 1;
|
||||
}
|
||||
51
Task/Ordered-Partitions/C/ordered-partitions-2.c
Normal file
51
Task/Ordered-Partitions/C/ordered-partitions-2.c
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
#include <stdio.h>
|
||||
|
||||
typedef unsigned int uint;
|
||||
|
||||
int parts[] = {2, 1, 2};
|
||||
#define n_parts sizeof(parts)/sizeof(parts[0])
|
||||
int bits[n_parts];
|
||||
|
||||
void show_part(uint x)
|
||||
{
|
||||
uint i;
|
||||
putchar('{');
|
||||
for (i = 0; (1 << i) <= x; i ++)
|
||||
if (x & (1 << i)) printf(" %d", i + 1);
|
||||
|
||||
printf("%s", " } ");
|
||||
}
|
||||
|
||||
void gen_bits(uint mask, uint all, uint res, int n, int pid)
|
||||
{
|
||||
uint i;
|
||||
while (!n) {
|
||||
bits[pid++] = res;
|
||||
if (pid == n_parts) {
|
||||
for (i = 0; i < n_parts; i++)
|
||||
show_part(bits[i]);
|
||||
putchar('\n');
|
||||
return;
|
||||
}
|
||||
mask = all &= ~res;
|
||||
res = 0;
|
||||
n = parts[pid];
|
||||
}
|
||||
|
||||
while (mask) {
|
||||
mask &= ~(i = mask & -(int)mask);
|
||||
gen_bits(mask, all, res | i, n - 1, pid);
|
||||
}
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
uint i, m;
|
||||
for (m = 1, i = 0; i < n_parts; i++)
|
||||
m <<= parts[i];
|
||||
m--;
|
||||
|
||||
gen_bits(m, m, 0, parts[0], 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue