HDU 5095 - Linearization of the kernel functions in SVM

9 篇文章 0 订阅

Problem Description

SVM(Support Vector Machine)is an importantclassification tool, which has a wide range of applications in clusteranalysis, community division and so on. SVM The kernel functions used in SVMhave many forms. Here we only discuss the function of the form f(x,y,z) = ax^2+ by^2 + cy^2 + dxy + eyz + fzx + gx + hy + iz + j. By introducing newvariables p, q, r, u, v, w, the linearization of the function f(x,y,z) isrealized by setting the correspondence x^2 <-> p, y^2 <-> q, z^2 <-> r, xy <-> u, yz <-> v, zx <-> w and the function f(x,y,z) = ax^2 + by^2 + cy^2 + dxy + eyz + fzx + gx+ hy + iz + j can be written as g(p,q,r,u,v,w,x,y,z) = ap + bq + cr + du + ev +fw + gx + hy + iz + j, which is a linear function with 9 variables.

Now your task is to write a program to change f into g.

 

 

Input

The input of the first line is an integer T,which is the number of test data (T<120). Then T data follows. For eachdata, there are 10 integer numbers on one line, which are the coefficients andconstant a, b, c, d, e, f, g, h, i, j of the function f(x,y,z) = ax^2 + by^2 +cy^2 + dxy + eyz + fzx + gx + hy + iz + j.

 

 

Output

For each input function, print its correspondentlinear function with 9 variables in conventional way on one line.

 

 

Sample Input

2

0 46 3 4 -5 -22 -8 -32 2427

2 31 -5 0 0 12 0 0 -49 12

 

 

Sample Output

46q+3r+4u-5v-22w-8x-32y+24z+27

2p+31q-5r+12w-49z+12

 

思路:

模拟


代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const char f[] = "pqruvwxyz";

int main()
{
	int t;
	int a[15];
	scanf("%d", &t);
	while (t--)
	{
		int i;
		bool flag = false;
		for (i = 0; i<9; i++)
		{
			scanf("%d", &a[i]);

			if (a[i] != 0)
			{
				if (a[i]<0)
					printf("-");
				else
					if (flag)
						printf("+");

				if (abs(a[i]) != 1)
					printf("%d", abs(a[i]));

				printf("%c", f[i]);
				flag = true;
			}
		}

		scanf("%d", &a[i]);
		if (a[i] != 0)
		{
			if (a[i]<0)
				printf("%d", a[i]);
			else
				if (flag)
					printf("+%d", a[i]);
				else
					printf("%d", a[i]);

			flag = true;
		}

		if (!flag)
			printf("0");

		printf("\n");
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值