首页 > ACM题库 > HDU-杭电 > hdu 2293 Name PK-字符串处理[解题报告]C++
2014
01-05

hdu 2293 Name PK-字符串处理[解题报告]C++

Name PK

问题描述 :

Name PK is a funny game on the Internet. The game will calculate character’s property based on its name.
Now we’re simulating a simple Name PK game. Each character has 3 parameters: HP, STR and SPD (HP for health point, STR for strength and SPD for attacking speed).

For a name string of length N, Ci is ASCII code (decimal) of the i-th char.

PK rule:
1. Timer begins to increase from 1. When it is a multiple of (20-SPD), the corresponding character A has that SPD attack once, the opposite lose STR(A’s) HP.

2. When any side has a HP ≤ 0, the PK is over.

输入:

The input consists of several test cases. The first line of input consists of an integer T, indicating the number of test cases. Each test case is on a separate line, and it consists two strings separated by a whitespace, indicating the name of the characters.
Technical Specification

1. Names contain only English letters.
2. The length of each character’s name is more than 1 and no more than 20.
3. T ≤ 1000.

输出:

The input consists of several test cases. The first line of input consists of an integer T, indicating the number of test cases. Each test case is on a separate line, and it consists two strings separated by a whitespace, indicating the name of the characters.
Technical Specification

1. Names contain only English letters.
2. The length of each character’s name is more than 1 and no more than 20.
3. T ≤ 1000.

样例输入:

3
Sylvia xay
Ivan Stacy
Boyd Greg

样例输出:

lose
win
lose

#include <cstdio>  
#include <iostream>  
#include <cstring>  
#include <cmath>  
#include <algorithm>  
using namespace std;  
int getHP(string a)  
{  
    int ans=0;  
    for(int i=0;i<a.length();i++)  
    {  
        ans+=(83-a[i])*(83-a[i]);  
        ans%=97;  
    }  
    return 300-ans;  
}  
int getSTR(string a)  
{  
    int ans=1;  
    for(int i=0;i<a.length();i++)  
    {  
        ans*=a[i];  
        ans%=79;  
    }  
    return 22+ans;  
}  
int getSPD(string a)  
{  
    int ans=0;  
    for(int i=0;i<a.length();i++)  
        for(int j=i+1;j<a.length();j++)  
        {  
            ans+=a[i]*a[j];  
            ans%=11;  
        }  
    return ans;  
}  
int main()  
{  
    int t;  
    scanf("%d",&t);  
    while(t--)  
    {  
        string a,b;  
        cin>>a>>b;  
        int a_HP=getHP(a);  
        int b_HP=getHP(b);  
        int a_STR=getSTR(a);  
        int b_STR=getSTR(b);  
        int a_SPD=getSPD(a);  
        int b_SPD=getSPD(b);  
  
        int a_atk=a_HP/b_STR,b_atk=b_HP/a_STR;  
        if(a_HP%b_STR!=0)  
            a_atk++;  
        if(b_HP%a_STR!=0)  
            b_atk++;  
  
        a_atk*=(20-b_SPD); // 被搞死的时间  
        b_atk*=(20-a_SPD);  
  
        if(a_atk<b_atk)  
            printf("lose\n");  
        else if(a_atk==b_atk)  
            printf("tie\n");  
        else  
            printf("win\n");  
    }  
    return 0;  
}  

 


  1. I like your publish. It is great to see you verbalize from the coronary heart and clarity on this essential subject matter can be easily noticed.