AtCoder Beginner Contest 198

AtCoder Beginner Contest 198

B - Palindrome with leading zeros

#include <bits/stdc++.h>

#pragma GCC optimize(2)
using namespace std;
#define int long long
typedef long long LL;
typedef long long ll;
const int INF = 0x3f3f3f3f;
//const int inf = 1e18;
//const int mod = 998244353;
const int mod = 1e9 + 7;
int gcd(int a, int b) { return !b ? a : gcd(b, a % b); }
const int maxn = 1e6 + 10;
const int N = 6e6 + 100;

int a[maxn];

void solve() {
    string s;
    cin>>s;
    int j=s.size()-1;
    while (s[j]=='0') j--;
    int f=1;
    for (int i = 0; i <=j; ++i) {
        if (s[i]!=s[j]) {
            f=0;
            break;
        }
        j--;
    }
    cout<<(f?"Yes":"No")<<"\n";
}

signed main() {
    //ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _ = 1;
//    cin >> _;
    while (_--) {
        solve();//cout<<"\n";
    }
    return 0;
}



C - Compass Walking

在圈内要两步

#include <bits/stdc++.h>

#pragma GCC optimize(2)
using namespace std;
#define int long long
typedef long long LL;
typedef long long ll;
const int INF = 0x3f3f3f3f;
//const int inf = 1e18;
//const int mod = 998244353;
const int mod = 1e9 + 7;
int gcd(int a, int b) { return !b ? a : gcd(b, a % b); }
const int maxn = 1e6 + 10;
const int N = 6e6 + 100;

int a[maxn];

void solve() {
    int r,x,y;
    cin>>r>>x>>y;
    double R=sqrt(x*x+y*y);
    if (R<r) cout<<2<<"\n";
    else 
    cout<<ceil(R/(r*1.0))<<"\n";
}

signed main() {
    //ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _ = 1;
//    cin >> _;
    while (_--) {
        solve();//cout<<"\n";
    }
    return 0;
}



D - Send More Money

dfs

#include <bits/stdc++.h>

#pragma GCC optimize(2)
using namespace std;
#define int long long
typedef long long LL;
typedef long long ll;
const int INF = 0x3f3f3f3f;
//const int inf = 1e18;
//const int mod = 998244353;
const int mod = 1e9 + 7;
int gcd(int a, int b) { return !b ? a : gcd(b, a % b); }
const int maxn = 1e6 + 10;
const int N = 6e6 + 100;

int mp[300];
int st[300];
int vis[300];
int sz[11];
int top=0;
int f=0;

string s1,s2,s3;
int l1,l2,l3;

int cal(string s){
    int sum=0;
    int n=s.size();
    for (int i = 0; i < n; ++i) {
        sum=sum*10+mp[s[i]];
    }
    return sum;
}

void dfs(int x){
    if (f==1) return;
    if (x==top){
        if (mp[s1[0]]==0||mp[s2[0]]==0||mp[s3[0]]==0)
            return;
        int n1=cal(s1);
        int n2=cal(s2);
        int n3=cal(s3);
        if (n1+n2==n3) {
            f=1;
            for (int i = 0; i < l1; ++i)
                cout<<mp[s1[i]];
            cout<<"\n";
            for (int i = 0; i < l2; ++i)
                cout<<mp[s2[i]];
            cout<<"\n";
            for (int i = 0; i < l3; ++i)
                cout<<mp[s3[i]];
            return;
        }
    }
    for (int i = 0; i <=9; ++i) {
        if (sz[i]) continue;
        mp[st[x]]=i;
        sz[i]=1;
        dfs(x+1);
        mp[st[x]]=-1;
        sz[i]=0;
    }
    return;
}

void solve() {
    memset(mp,-1,sizeof(mp));
    cin>>s1>>s2>>s3;
    l1=s1.size();
    l2=s2.size();
    l3=s3.size();
    if (l1==1&&l2==1&&l3==1&&s1==s2&&s2==s3){
        cout<<"0\n0\n0\n";
        return;
    }
    for (int i = 0; i < l1; ++i)
        if (vis[s1[i]]==0)
            vis[s1[i]]=1,st[top++]=s1[i];
    for (int i = 0; i < l2; ++i)
        if (vis[s2[i]]==0)
            vis[s2[i]]=1,st[top++]=s2[i];
    for (int i = 0; i < l3; ++i)
        if (vis[s3[i]]==0)
            vis[s3[i]]=1,st[top++]=s3[i];
    if (top>10) {cout<<"UNSOLVABLE";return;}
    dfs(0);
    if (!f) cout<<"UNSOLVABLE";
}

signed main() {
    //ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _ = 1;
//    cin >> _;
    while (_--) {
        solve();//cout<<"\n";
    }
    return 0;
}



在这里插入图片描述

#include <bits/stdc++.h>

#pragma GCC optimize(2)
using namespace std;
#define int long long
typedef long long LL;
typedef long long ll;
const int INF = 0x3f3f3f3f;
//const int inf = 1e18;
//const int mod = 998244353;
const int mod = 1e9 + 7;
int gcd(int a, int b) { return !b ? a : gcd(b, a % b); }
const int maxn = 1e6 + 10;
const int N = 6e6 + 100;

string s[3];
int t[10];
int mp[256];

int cal(string s){
    if (t[mp[s[0]]]==0) return -1;
    int res=0;
    for(auto c:s) res=res*10+t[mp[c]];
    return res;
}

void solve() {
    memset(mp,-1,sizeof(mp));
    int sz=0;
    for (int i = 0; i < 3; ++i) {
        cin>>s[i];
        for(auto c:s[i]){
            if (mp[c]==-1) mp[c]=sz++;
        }
    }
    if (sz>10) {cout<<"UNSOLVABLE\n";return;}
    for(int i=0;i<10;i++) t[i]=i;
    do{
        int n[3];
        bool ok=0;
        for (int i = 0; i < 3; ++i) {
            n[i]=cal(s[i]);
            if (n[i]<0) ok=1;
        }
        if (!ok&&n[0]+n[1]==n[2]){
            for(int i=0;i<3;i++) cout<<n[i]<<"\n";
            return;
        }
    }while (next_permutation(t,t+10));
    cout<<"UNSOLVABLE\n";
}

signed main() {
    //ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _ = 1;
//    cin >> _;
    while (_--) {
        solve();//cout<<"\n";
    }
    return 0;
}



E - Unique Color

#include <bits/stdc++.h>

#pragma GCC optimize(2)
using namespace std;
#define int long long
typedef long long LL;
typedef long long ll;
const int INF = 0x3f3f3f3f;
//const int inf = 1e18;
//const int mod = 998244353;
const int mod = 1e9 + 7;
int gcd(int a, int b) { return !b ? a : gcd(b, a % b); }
const int maxn = 1e6 + 10;
const int N = 6e6 + 100;

int c[maxn];
vector<int > e[maxn];
int vis[maxn];
int g[maxn];

void dfs(int x,int fa){
    if (vis[c[x]]==0) g[x]=1;
    vis[c[x]]++;
    for(auto v:e[x]) if (fa!=v) dfs(v,x);
    vis[c[x]]--;
}

void solve() {
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>c[i];
    for (int i = 0; i < n - 1; ++i) {
        int u,v;
        cin>>u>>v;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    dfs(1,0);
    for (int i = 1; i <=n; ++i)
        if (g[i]) cout<<i<<"\n";
}

signed main() {
    //ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _ = 1;
//    cin >> _;
    while (_--) {
        solve();//cout<<"\n";
    }
    return 0;
}



F - Cube

#include <bits/stdc++.h>

#pragma GCC optimize(2)
using namespace std;
#define int long long
typedef long long LL;
typedef long long ll;
const int INF = 0x3f3f3f3f;
//const int inf = 1e18;
const int mod = 998244353;
//const int mod = 1e9 + 7;
int gcd(int a, int b) { return !b ? a : gcd(b, a % b); }
const int maxn = 1e6 + 10;
const int N = 6e6 + 100;

int inv(int x){
    int ret=1,pow=mod-2;
    while (pow){
        if (pow&1) ret=ret*x%mod;
        x=x*x%mod;
        pow>>=1;
    }
    return ret;
}

int c(int n,int m){
    int ret=1;
    for (int i = n; i >= n-m+1; --i)
        (ret*=i)%=mod;
    for (int i = 1; i <=m; ++i)
        (ret*=inv(i)) %=mod;
    return ret;
}

void solve() {
    int s,ans=0;
    cin>>s;
    s-=6;

    ///1,1,1,1,1,1  *  1
    ans=(ans+c((s+5)%mod,5))%mod;
    ///2,2,2  *  6
    if (s%2==0)
        ans=(ans+c((s/2+2)%mod,2)*6%mod)%mod;
    ///3,3  *  8
    if (s%3==0)
        ans=(ans+(s/3+1)%mod*8%mod)%mod;
    ///1,1,4  *  6
    ans=(ans+(s/4%mod+1)%mod*(s%mod-(s/4)%mod*2+1)%mod*6%mod)%mod;
    ///1,1,2,2  *  3
    ans=(ans+((3*(s+1)%mod-4*(s/2%mod))%mod*(s/2%mod+2)%mod*(s/2%mod+1)%mod*inv(6)%mod)*3)%mod;
    cout<<(ans*inv(24)%mod+mod)%mod<<"\n";


}

signed main() {
    //ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _ = 1;
//    cin >> _;
    while (_--) {
        solve();//cout<<"\n";
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值