AtCoder Beginner Contest 320 A/B/D

A - Leyland Number

不能使用pow函数,因为pow是用于浮点数的
使用自定义mypow函数

#include
#define int long long
using namespace std;
long long mypow(int x,int y)
{
    long long ans=1;
    while(y--)
    {
        ans*=x;
    }
    return ans;
}
signed main()
{
    int a,b;cin>>a>>b;
    cout<<mypow(a,b)+mypow(b,a);
}

B - Longest Palindrome

最长回文数,暴力枚举即可

#include
#include
#include
using namespace std;
int main()
{
    int ans=1;
    string s;cin>>s;
    for(int i=0;i<s.length();i++)
    {
        for(int j=2;j<=s.length()-i;j++)
        {
            string ss=s.substr(i,j);
            reverse(ss.begin(),ss.end());
            if(ss==s.substr(i,j)){
                ans=max(ans,j);
            }
        }
    }
    cout<<ans<<endl;
}

D - Relative Position

深搜题
定义vis标记是否访问,即该点是否被确定。

#include
#include
#define int long long
using namespace std;
int n,m;
const int MAXN=2e5+5;
struct node{
    int target;
    int x,y;
};
struct node2{
    int x,y;
}pos[MAXN];
int vis[MAXN];
std::vector<std::vector<node>>Go(MAXN);
void dfs(int i,int x,int y)
{
    vis[i]=1;
    pos[i]={x,y};
    for(auto xx:Go[i])
    {
        if(vis[xx.target]==1) continue;
        dfs(xx.target,x+xx.x,y+xx.y);
    }
}
signed main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int a,b,x,y;
        cin>>a>>b>>x>>y;
        Go[a].push_back({b,x,y});
        Go[b].push_back({a,-x,-y});
    }
    dfs(1,0,0);
    for(int i=1;i<=n;i++)
    {
        if(vis[i]){
            cout<<pos[i].x<<" "<<pos[i].y<<endl;
        }else{
            cout<<"undecidable"<<endl;
        }
    }
}

你可能感兴趣的:(算法,图论,深度优先)