牛客寒假算法基础集训营4

https://ac.nowcoder.com/acm/contest/330#question

A.Applese 的取石子游戏

#include <bits/stdc++.h>
using namespace std;
 
const int maxn = 1e5 + 10;
int N;
int a[maxn];
 
int main() {
    scanf("%d", &N);
    int sum1 = 0, sum2 = 0;
    for(int i = 0; i < N; i ++) {
        scanf("%d", &a[i]);
        if(i % 2 == 0) sum1 += a[i];
        else sum2 += a[i];
    }
 
    if(sum1 > sum2 || sum2 > sum1)
        printf("Applese\n");
    else printf("Bpplese\n");
    return 0;
}
View Code

简单博弈 送温暖

B.Applese 走方格

#include <bits/stdc++.h>
using namespace std;

int N, M;
string ans = "";

int main() {
    scanf("%d%d", &N, &M);
    if(N % 2 && M % 2) printf("-1\n");
    else if(N == 1 && M == 2) printf("RL\n");
    else if(N == 2 && M == 1) printf("DU\n");
    else if(N == 1 && M != 2 || N != 2 && M == 1) printf("-1\n");
    else {
        if(M % 2 == 0) {
            for(int i = 0; i < N - 1; i ++)
                ans += 'D';
            for(int i = 0; i < M / 2 - 1; i ++) {
                ans += 'R';
                for(int j = 0; j < N - 2; j ++)
                    ans += 'U';
                ans += 'R';
                for(int j = 0; j < N - 2; j ++)
                    ans += 'D';
            }
            ans += 'R';
            for(int i = 0; i < N - 1; i ++)
                ans += 'U';
            for(int i = 0; i < M - 1; i ++)
                ans += 'L';
        } else {
            for(int i = 0; i < M - 1; i ++)
                ans += 'R';
            for(int i = 0; i < N / 2 - 1; i ++) {
                ans += 'D';
                for(int j = 0; j < M - 2; j ++)
                    ans += 'L';
                ans += 'D';
                for(int j = 0; j < M - 2; j ++)
                    ans += 'R';
            }
            ans += 'D';
            for(int i = 0; i < M - 1; i ++)
                ans += 'L';
            for(int i = 0; i < N - 1; i ++)
                ans += 'U';
        }
        cout << ans << endl;
    }
    return 0;
}
View Code

如果 N M 都是奇数的话输出 -1 如果 N M 中有一个是 1 的话 另一个不能超过 2 即 N = 1, M = 2 和 N = 2, M = 1 是可以的 其他情况模拟就好了 然而因为 Be 主当时多余的三句话导致 wa 了 10 发 怀疑人生

E.Applese 涂颜色

#include <bits/stdc++.h>
using namespace std;
 
const int mod = 1e9+7;
typedef long long ll;
 
ll phi(ll n)
{
    int ans=n,temp=n;
    for(int i=2;i*i<=temp;i++)
    {
        if(temp%i==0)
        {
            ans-=ans/i;
            while(temp%i== 0) temp/=i;
        }
    }
    if(temp>1) ans-=ans/temp;
    return ans;
}
ll mod_pow(ll x,ll n,ll mod)
{
    ll ans=1;
    while(n)
    {
        if(n%2==1) ans=ans*x%mod;
        x=x*x%mod;
        n/=2;
    }
    return ans;
}
 
ll a,c;
char b[1000010], m[1000010];
 
int main()
{
    scanf("%s%s", b, m);
 
    //c %= mod;
    //a %= mod;
    ll phic=phi(mod);
    int i,len=strlen(b);
    ll res=0,ans;
    for( i=0;i<len;i++)
    {
        res=res*10+b[i]-'0';
        if(res>phic)
        break;
    }
    if(i==len)
    {
        ans=mod_pow(2,res,mod)%mod;
    }
    else
    {
        res=0;
        for(int i=0;i<len;i++)
        {
            res=res*10+b[i]-'0';
            res%=phic;
        }
        ans=mod_pow(2,res+phic,mod)%mod;
    }
    cout<< ans <<endl;
 
    return 0;
}
View Code

欧拉函数      答案就是 $2^N$ 

I.Applese 的回文串

#include <bits/stdc++.h>
using namespace std;
 
bool IsHuiWen(string str) {
    for(int i = 0; i < (int)str.size() / 2;i ++) {
        if(str[i] != str[str.size() - 1 - i])
            return false;
    }
    return true;
}
 
int main() {
    string str;
    cin >> str;
    bool flag = false;
    int i;
    for(i = 0; i < (int)str.size() / 2; i ++) {
            if(str[i] != str[str.size() - 1 - i])
                break;
    }
    if(i == (int)str.size() / 2)
        flag = true;
    else
        flag = (IsHuiWen(str.substr(i + 1, str.size() - 2 * i - 1)) ||
                IsHuiWen(str.substr(i, str.size() - 2  * i - 1)));
 
    cout << ((flag == true) ? "Yes" : "No")<<endl;
    return 0;
}
View Code

时间复杂度为 O(N) 学到了

J.Applese 的减肥计划

#include <bits/stdc++.h>
using namespace std;

#define pi 3.1415926535897932384626433832795028841971
int F1, F2, a;

int main() {
    scanf("%d%d%d", &F1, &F2, &a);
    double ans = 1.0 * F1 * F1 + 1.0 * F2 * F2 + 2.0 * F1 * F2 * cos(1.0 * a * pi / 180);
    printf("%.10lf\n", sqrt(ans));
    return 0;
}
View Code

$F1^2 + F2^2 + 2 * F1 * F2 * cos(a)$

FHFHFH

猜你喜欢

转载自www.cnblogs.com/zlrrrr/p/10335776.html