Example #1
0
int main(void)
{
	int a,b,d1,d2,p1=0,p2=0;
	
	scanf("%d%d%d%d",&a,&d1,&b,&d2);
	p1 = findp(a,d1);
	p2 = findp(b,d2);
	printf("%d\n",p1+p2);
}
void joint(int x, int y) {
    x = findp(x), y = findp(y);
    if (x == y)	return;
    if (weight[x] > weight[y]) {
        parent[y] = x, weight[x] += weight[y];
        tree.merge(root[y], root[x]);
        
    } else {
        parent[x] = y, weight[y] += weight[x];
        tree.merge(root[x], root[y]);
    }
}
Example #3
0
static void test(){
    char data[] ="$GPGSA,M,3,17,02,30,04,05,10,09,06,31,12,,,1.2,0.8,0.9*2B";
    char *p = data,*pb;
    int i,j = 0,chesum,prn[12];
    float pdop,hdop,vdop;

#if 0
    p = data;
    pb = strchr(p,',');
    *pb = '\0';
#endif
    if(findp(&p,',') > 0)
    printf("\ngps:%s",p);
#if 0
    p = pb+1;
    pb = strchr(p,',');
    *pb = '\0';
    printf("\nM:%s",p);
    
    p = strchr(p+1,',');
    *p = '\0';
    printf("%s",p);
#endif
#if 0
    getp = strtok(p,",");
    if((i = strcmp("$GPGSA",getp)) != 0) return -1;
    getp = strtok(NULL,",");
    printf("\nM:%s",getp);
    getp = strtok(NULL,",");
    printf("\node:%s",getp);
    printf("\nprn:");
    for(i = 0;i < 12;i++)
        if((getp = strtok(NULL,",")) != ""){
            printf("%s   ",getp);
            prn[j++] = atoi(getp);
        }

    getp = strtok(NULL,",");
    printf("\npdop:",getp);
    pdop = atof(strtok(NULL,","));
    hdop = atof(strtok(NULL,","));
    vdop = atof(strtok(NULL,"*"));
    chesum = atoi(p);

    printf("\npdop:%f   hdop:%f  vdop:%f",pdop,hdop,vdop);
    printf("%d  ",chesum);
    getp = strtok(p,",");
    printf("\ngpgsa: %s",getp);
    printf("\ni:%d",i);
#endif

}
Example #4
0
File: 2996.c Project: UsuallyGO/POJ
int main()
{
    char line[33];
    char qipan[8][8];
    int first, second;
    int fin, sin;
    olen = 0;

    fin = 0;
    for(first=0; first<17; first++)
    {
	scanf("%s", line);
	if(first%2 == 0)
	    continue;
	
	sin = 0;
	for(second=2; second<33; second+=4)
	{
	    qipan[fin][sin++] = line[second];    
	}

	fin++;
    }

#if DEBUG
    show(qipan, 8);
#endif

    printf("White: ");
    find(qipan, 8, 'K');
    find(qipan, 8, 'Q');
    find(qipan, 8, 'R');
    find(qipan, 8, 'B');
    find(qipan, 8, 'N');
    findp(qipan, 8, 'P');
    output[strlen(output)-1] = '\0';
    printf("%s\n", output);

    memset(output, 0, 500);
    printf("Black: ");
    Find(qipan, 8, 'k');
    Find(qipan, 8, 'q');
    Find(qipan, 8, 'r');
    Find(qipan, 8, 'b');
    Find(qipan, 8, 'n');
    Findp(qipan, 8, 'p');
    output[strlen(output)-1] = '\0';
    printf("%s\n", output);

    return 0;
}
int main() {
    //    freopen("in.txt", "r+t", stdin);
    //    freopen("out.txt", "w+t", stdout);
    int n, m, q, t;
    int cases = 0;
    while (scanf("%d %d", &n, &m) == 2 && n) {
        tree.init();
        for (int i = 1; i <= n; i++)
            scanf("%d", &w[i]);
        for (int i = 1; i <= m; i++)
            scanf("%d %d", &edgeX[i], &edgeY[i]);
        int exists[MAXM] = {};
        for (int i = 1; i <= m; i++)
            exists[i] = 1;
        for (q = 0; scanf("%s", cmd[q]) == 1 && cmd[q][0] != 'E'; q++) {
            if (cmd[q][0] == 'D')
                scanf("%d", &QX[q]), exists[QX[q]] = 0;
            else if (cmd[q][0] == 'C')
                scanf("%d %d", &QX[q], &QY[q]), t = QY[q], QY[q] = w[QX[q]], w[QX[q]] = t;
            else if (cmd[q][0] == 'Q')
                scanf("%d %d", &QX[q], &QY[q]);
        }
        
        for (int i = 1; i <= n; i++)
            root[i] = null;
        for (int i = 1; i <= n; i++)
            tree.insert(root[i], w[i]);
        initDisjointSet(n);
        for (int i = 1; i <= m; i++)
            if (exists[i] == 1)
                joint(edgeX[i], edgeY[i]);
        
        double ret = 0, cnt = 0;
        for (int i = q - 1; i >= 0; i--) {
            if (cmd[i][0] == 'D')
                joint(edgeX[QX[i]], edgeY[QX[i]]);
            else if (cmd[i][0] == 'C')
                changeVertex(QX[i], QY[i]);
            else if (cmd[i][0] == 'Q') {
                cnt++;
                node* v = tree.rkth_element(root[findp(QX[i])], QY[i]);
                if (v == null)	/*puts("undefined")*/;
                else 			ret += v->key/*, printf("kth %d\n", v->key)*/;
            }
        }
        ret /= cnt;
        printf("Case %d: %lf\n", ++cases, ret);
    }
    return 0;
}
Example #6
0
int main(void)
{
    int head, tail;
    Big max;
    Divisor prime[MAXP];

    findp(prime);
    scanf("%*d");
    while (scanf("%d %d", &head, &tail) == 2) {
        max = maxn(prime, head, tail);
        printf("Between %d and %d, %d has a maximum of %d divisors.\n"
                , head, tail, max.number, max.sum);
    }
    return 0;
}
Example #7
0
// haystack: original string, needle: pattern
// both start from index 0
char* kmp(char *haystack, char* needle) {
  char* s = haystack, *p = needle;
  int n = strlen(s);
  int m = strlen(p);
  vector<int> pre;

  findp(p, pre);
  int j = -1;
  for (int i = 0; i < n; ++i) {
    while (j != -1 && s[i] != p[j + 1]) {
      j = pre[j];
    }
    if (s[i] == p[j + 1]) {
      ++j;
    }
    if (j == m - 1) {
      // find the answer
      return haystack + (i - j);
    }
  }
  return nullptr;
}
void changeVertex(int u, int val) {
    int r = findp(u);
    tree.remove(root[r], w[u]);
    tree.insert(root[r], val);
    w[u] = val;
}
int findp(int x) {
    return parent[x] == x ? x : (parent[x] = findp(parent[x]));
}