2019 杭电多校 1 1013
题目链接:HDU 6590
比赛链接:2019 Multi-University Training Contest 1
Problem Description
After returning with honour from ICPC(International Cat Programming Contest) World Finals, Tom decides to say goodbye to ICPC and start a new period of life. He quickly gets interested in AI.
In the subject of Machine Learning, there is a classical classification model called perceptron, defined as follows:
Assuming we get a set of training samples: $D={(\boldsymbol{x_1},y_1),(\boldsymbol{x_2},y_2),…,(\boldsymbol{x_N},y_N)}$, with their inputs $\boldsymbol{x}\in \mathbb{R}^d$, and outputs $y\in \{−1,1\}$. We will try to find a function $f(\boldsymbol{x})=sign(\sum_{i=1}^d w_i\cdot x_i+b)=sign(\boldsymbol{w^T} \cdot \boldsymbol{x}+b)$ so that $f(\boldsymbol{x_i})=y_i,i=1,2,…,N$.
$\boldsymbol{w}, \boldsymbol{x}$ mentioned above are all d-dimensional vectors, i.e. $\boldsymbol{w}=(w_1,w_2,…,w_d), \boldsymbol{x}=(x_1,x_2,…,x_d)$. To simplify the question, let $w_0=b$, $x_0=1$, then $f(\boldsymbol{x})=sign(\sum_{i = 0}^d w_i\cdot x_i)=sign(\boldsymbol{w^T}\cdot \boldsymbol{x})$. Therefore, finding a satisfying function $f(\boldsymbol{x})$ is equivalent to finding a proper $\boldsymbol{w}$.
To solve the problem, we have a algorithm, PLA(Popcorn Label Algorithm).
Accoding to PLA, we will randomly generate $\boldsymbol{w}$.
If $f(\boldsymbol{x})=sign(\boldsymbol{w^T}\cdot \boldsymbol{x})$ fails to give any element $(\boldsymbol{x_i},y_i)\in D$ the right classification, i.e. $f(\boldsymbol{x_i})\neq y_i$, then we will replace $w$ with another random vector. We will do this repeatedly until all the samples $\in D$ are correctly classified.
As a former-JBer, Tom excels in programming and quickly wrote the pseudocode of PLA.
w := a random vector while true do flag:=true for i:=1 to N do if f(x[ i ]) != y[ i ] then flag:=false break if flag then break else w := a random vector return w
But Tom found that, in some occasions, PLA will end up into an infinite loop, which confuses him a lot. You are required to help Tom determine, when performed on a given sample set $D$, if PLA will end up into an infinite loop. Print Infinite loop! if so, or Successful! otherwise.
We only consider cases when $d=2$ for simplification.
Note:
Input
The first line contains an integer $T(1\le T\le 1000)$, the number of test cases.
Each test case begins with a line containing a single integer $n(1\le n\le 100)$, size of the set of training samples $D$.
Then $n$ lines follow, the ith of which contains three integers $x_{i,1},x_{i,2},y_i (−10^5\le x_{i,1},x_{i,2}\le 10^5, y_i\in {−1,1})$, indicating the ith sample $(x_i,y_i)$ in $D$, where $x_i=(x_{i,1},x_{i,2})$.
Output
For each test case, output a single line containing the answer: “Infinite loop!” or “Successful!”.
Sample Input
1 | 3 |
Sample Output
1 | Successful! |
Solution
题意
给出两类点的坐标,问能否用一条直线将两类点分开。
题解
题目看懂了就很好做了。
就是分别对两类点求凸包,然后判断两个凸包是否相交。若不相交,则能够用一条直线分开两类点,否则不能。
其实就是判断凸包是否相交的模板题。
类似的题目有:
Code
1 |
|