ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AtCoder Beginner Contest 145

2021-02-23 21:33:42  阅读:168  来源: 互联网

标签:AtCoder 145 infact Beginner int res LL long mod


目录

A - Circle

#include<bits/stdc++.h>

using namespace std;

const int N = 1e6 + 5;
typedef long long LL;
int r;
int main(){
    cin >> r;
    cout << r * r << endl;
    return 0;
}

B - Echo

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 5;
typedef long long LL;
int n;
string s;
int main() {
    cin >> n >> s;
    if (n & 1)
        cout << "No" << endl;
    else {
        int mid = n / 2;
        for (int i = 0; i < mid; i++) {
            if(s[i]!=s[i+mid]){
                cout << "No" << endl;
                return 0;
            }
        }
        cout << "Yes" << endl;
    }
    return 0;
}

C - Average Length

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 5;
typedef long long LL;
int n, base[10];
double x[10], y[10];
int main() {
    for (int i = 1; i <= 8; i++) base[i] = i;
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> x[i] >> y[i];
    double sum = 0;
    int cnt = 0;
    while (1) {
        double tmp = 0;
        for (int i = 2; i <= n; i++) {
            tmp += sqrt((x[base[i]] - x[base[i-1]]) * (x[base[i]] - x[base[i-1]]) +
                        (y[base[i]] - y[base[i-1]]) * (y[base[i]] - y[base[i-1]]));
        }
        sum += tmp;
        cnt++;
        if (!next_permutation(base+1,base+n+1)) break;
    }
    printf("%.7lf\n", sum / (double)cnt);
    return 0;
}

D - Knight

大意:

一个棋子从原点开始,当坐标为xy时,可以跳到(x+2,y+1)或者(x+1,y+2)

给出一个坐标(n,m),问有多少种方法可以走到这个点

思路:

首先考虑点(n,2 * n),那么只有一个方法可以走到

而对于点(n+1,2 * n-1),有n个方法可以走到,也就是任选一个横着跳的,把它改成竖着跳的

以此类推,组合计数一顿乱搞即可

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 5;
typedef long long LL;
int n, m;
LL res, mod = 1e9 + 7;

int fact[N], infact[N];

LL qmi(LL a, LL k, LL p) {
    LL res = 1;
    while (k) {
        if (k & 1) res = res * a % p;
        k >>= 1;
        a = a * a % p;
    }
    return res;
}

// 预处理
void init() {
    fact[0] = infact[0] = 1;
    for (int i = 1; i < N; ++i) {
        fact[i] = (LL)fact[i - 1] * i % mod;
        infact[i] = (LL)infact[i - 1] * qmi(i, mod - 2, mod) % mod;
    }
}

LL Cnm(int a,int b){
    return (LL)fact[a] * infact[b] % mod * infact[a - b] % mod;
}
int main() {
    cin >> n >> m;
    init();
    for (int i = 0; i <= min(n, m); i++) {
        if(2*n-3*i==m){
            res = (res + Cnm(n-i, i))%mod;
        }
    }
    cout << res << endl;
    return 0;
}

E - All-you-can-eat

大意:

有n道菜,每道菜需要a[i]分吃完,能获得b[i]的美味值 给T分钟,问怎么样吃,才能在T内得到最多的美味值,

一旦开始了吃就一定会吃完这道菜,哪怕时间超过T分

思路:

之前背包的上限容量 是T,但是因为题目限制,所以可以把背包容量扩充到 T+w[i]-1

这个时候这个物品就可以超出 容量T ,并且小于 T+w[i] 也保证了不可能出现大于容量T还进行的情况。

但是还有一个点是要对物品进行排序,先选时间小的

可以考虑一个极端的情况来理解:如果一个物品时间非常大,大于T,如果先考虑用它进行背包,那么后面小的物品更新的时候肯定不会考虑到这个物品,但是如果最后才考虑这个物品,可以最后吃它,然后超过t仍然可以吃

#include <bits/stdc++.h>

using namespace std;

const int N = 1e4 + 5;
typedef long long LL;
int n, t;

LL dp[N];
struct node {
    LL x, v;
} a[N];
bool cmp(node a, node b) { return a.x < b.x; }
int main() {
    cin >> n >> t;
    LL res = 0;
    for (int i = 0; i < n; i++) cin >> a[i].x >> a[i].v;
    //sort(a, a + n, cmp);
    for (int i = 0; i < n; i++) {
        for (int j = t + a[i].x - 1; j >= a[i].x; j--) {
            dp[j] = max(dp[j], dp[j - a[i].x] + a[i].v);
            res = max(res, dp[j]);
        }
    }
    cout << res << endl;
    return 0;
}

F - Laminate

大意:

现在有n个柱子排在一起,每个柱子有个高度hi。
现在有至多k次机会任意修改某些柱子的高度。
之后会执行操作:每次可以横向消去一段连续的柱子。问最终最少的操作次数是多少。

思路:

抄的https://blog.csdn.net/qq_43857314/article/details/103441434

太难想了orz...

图片.png

标签:AtCoder,145,infact,Beginner,int,res,LL,long,mod
来源: https://www.cnblogs.com/dyhaohaoxuexi/p/14438285.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有