杭电5660 jrMz and angles

题意:给你两个正n边形,问它们的内角和是否能组成360度,每个内角可以不用或者使用多次

题解:第一眼就想到了多重部分和,然后用dfs写的,然而终测wa掉了,
我猜可能会是精度问题,于是又在杭电上交了很多次,都没错,又自己枚举了所有测试数据和标称比,还是没错。。。最后我认为应该是bool函数最后少了个return false,我的编译器默认返回false,而当时终测的时候的编译器不是默认返回false。心痛的要死,本来BC至少能上1750分的,哎。。。。。。。

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cassert>
#define RI(N) scanf("%d",&(N))
#define RII(N,M) scanf("%d %d",&(N),&(M))
#define RIII(N,M,K) scanf("%d %d %d",&(N),&(M),&(K))
#define Cl0(a) memset((a),0,sizeof(a))
using namespace std;
const int inf=1e9;
const int inf1=-1*1e9;
typedef long long LL;
double eps=1e-8;
double  a,b;
bool dfs(double q)
{
    if(q>=360-eps) return (q>=360-eps&&q<=360+eps);
    else
    {
        if(dfs(q+a)) return 1;
        if(dfs(q+b)) return 1;
    }
    return false;
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        cin>>a>>b;
        a=180-360/a;
        b=180-360/b;
        if(dfs(0)) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }

    return  0;
}

你可能感兴趣的:(杭电5660)