1417
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100
#define M 10000
#define LEN 101
typedef struct node {
int x;
int y;
int d;
} ROAD;
int n;
int pre[N+1];
int count[N+1];
int num;
void init()
{
for (int i=1; i<=n; i++)
{
pre[i] = i;
count[i] = 1;
}
num = n;
}
int find(int i)
{
while (i != pre[i])
i = pre[i];
return i;
}
int combine(int i, int j)
{
int a = find(i);
int b = find(j);
if (a != b)
{
if (count[a] > count[b])
{
pre[b] = a;
count[a] += count[b];
count[b] = 0;
}
else
{
pre[a] = b;
count[b] += count[a];
count[a] = 0;
}
num --;
return 1;
}
else
return 0;
}
int cmp(const void *a, const void *b)
{
ROAD *x = (ROAD *)a;
ROAD *y = (ROAD *)b;
return x->d - y->d;
}
char mods[N][LEN];
int countMods;
int insert(char s[LEN])
{
int i;
for (i=0; i<countMods; i++)
{
if (strcmp(s, mods[i]) == 0)
break;
}
if (i == countMods)
{
strcpy(mods[countMods++], s);
return countMods;
}
return i+1;
}
int main(void)
{
int m, i;
ROAD r[M];
char sa[LEN], sb[LEN];
int max;
while (scanf("%d%d", &n, &m) != EOF)
{
countMods = 0;
for (i=0; i<m; i++)
{
scanf("%s%s%d", sa, sb, &r[i].d);
r[i].x = insert(sa);
r[i].y = insert(sb);
}
qsort(r, m, sizeof(r[0]), cmp);
init();
max = 0;
for(i=0; i<m; i++)
{
if(combine(r[i].x, r[i].y))
max = r[i].d;
if (num == 1)
break;
}
if (num > 1)
printf("My God\n");
else
printf("%d\n", max);
}
return 0;
}
1418(未完成)
1419
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define M 200
struct doc {
char s[M+1];
char slower[M+1];
};
int cmp(const void *a, const void *b)
{
struct doc *c = (struct doc *)a;
struct doc *d = (struct doc *)b;
return strcmp(c->slower, d->slower);
}
int main()
{
int i, j, n;
struct doc d[M];
while(scanf("%d\n", &n) != EOF)
{
for (i=0; i<n; i++)
{
gets(d[i].s);
for (j=0; d[i].s[j]; j++)
d[i].slower[j] = tolower(d[i].s[j]);
d[i].slower[j] = '\0';
}
qsort(d, n, sizeof(d[0]), cmp);
for (i=0; i<n; i++)
printf("%s\n", d[i].s);
}
return 0;
}
1420
#include <stdio.h>
#include <string.h>
int n, k;
int fruit[100], used[100];
int total, half;
void dfs(int x, int y)
{
int i;
if (y > half)
return;
if (y > k)
k = y;
if (k == half)
return;
for (i = x; i < n; i++)
{
if (!used[i]) {
used[i] = 1;
dfs(i + 1, y + fruit[i]);
used[i] = 0;
}
}
}
int main() {
int i;
while(scanf("%d", &n) != EOF)
{
total = 0;
for(i = 0;i < n; i++)
{
scanf("%d", &fruit[i]);
total += fruit[i];
}
k = -1;
half = total >> 1;
memset(used, 0, sizeof(used));
dfs(0, 0);
printf("%d\n", total- k * 2);
}
return 0;
}
/************************************************************** Problem: 1420 User: liangrx06 Language: C Result: Accepted Time:50 ms Memory:916 kb ****************************************************************/
1421(未完成)
1422
int a[N+2], left[N+2], li[N+2], right[N+2], ri[N+2];
int main(void)
{
int t, n, i, j;
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
for(i=1; i<=n; i++)
scanf("%d", &a[i]);
left[0] = a[0] = INF;
li[0] = 0;
right[n+1] = a[n+1] = INF;
ri[n+1] = n+1;
for (i=1; i<=n; i++)
{
if (a[i-1] < a[i])
{
left[i] = a[i-1];
li[i] = i-1;
}
else if (left[i-1] < a[i])
{
left[i] = left[i-1];
li[i] = li[i-1];
}
else
{
left[i] = INF;
li[i] = 0;
for (j=li[i-1]-1; j>=1; j--)
{
if (a[j] < a[i])
{
left[i] = a[j];
li[i] = j;
break;
}
}
}
}
for (i=n; i>=1; i--)
{
if (a[i+1] < a[i])
{
right[i] = a[i+1];
ri[i] = i+1;
}
else if (right[i+1] < a[i])
{
right[i] = right[i+1];
ri[i] = ri[i+1];
}
else
{
right[i] = INF;
ri[i] = n+1;
for (j=ri[i+1]+1; j<=n; j++)
{
if (a[j] < a[i])
{
right[i] = a[j];
ri[i] = j;
break;
}
}
}
}
/*
for (i=1; i<=n; i++)
printf("%d ", left[i]);
printf("\n");
for (i=1; i<=n; i++)
printf("%d ", right[i]);
printf("\n");
*/
for (i=1; i<=n; i++)
{
if (i > 1)
printf(" ");
if (left[i] == INF && right[i] == INF)
printf("%d", 0);
else if (right[i] == INF)
printf("%d", left[i]);
else if (left[i] == INF)
printf("%d", right[i]);
else if (i - li[i] <= ri[i] - i)
printf("%d", left[i]);
else
printf("%d", right[i]);
}
printf("\n");
}
return 0;
}
/**************************************************************
Problem: 1422
User: liangrx06
Language: C
Result: Accepted
Time:1270 ms
Memory:20444 kb
****************************************************************/
1423-1430(未完成)