zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 179

    题目链接

    A - Plural Form

    /*
     * @Author       : nonameless
     * @Date         : 2020-09-19 20:00:41
     * @LastEditors  : nonameless
     * @LastEditTime : 2020-09-19 20:05:21
     */
    #include <bits/stdc++.h>
    #define x first
    #define y second
    #define pb push_back
    #define sz(x) (int)x.size()
    #define toStr(name) (#name)
    #define all(x) x.begin(), x.end()
    using namespace std;
    typedef long long ll;
    typedef pair<ll, ll> PLL;
    typedef pair<int, int> PII;
    typedef pair<double, double> PDD;
    const double eps = 1e-6;
    const double PI  = acos(-1.0);
    const int INF = 0x3f3f3f3f;
    const ll LNF  = 0x3f3f3f3f3f3f3f3f;
    inline int gcd(int a, int b) { return b ? gcd(b,a % b):a;}
    inline ll  gcd(ll  a, ll  b) { return b ? gcd(b,a % b):a;}
    inline int lcm(int a, int b) { return a * b / gcd(a, b); }
    
    template<class T>
    inline void read(T &x){
        x = 0;
        int f = 1;
        char c = getchar();
        while(c < '0' || c > '9')   { if(c == '-') f = -1;  c = getchar(); }
        while(c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); }
        x = x * f;
    }
    
    template<class T>
    inline void out(string a, T x){ cout << a << " = " << x << endl; }
    
    
    int main(){
    
        string s; cin >> s;
        int len = sz(s);
        if(s[len - 1] == 's') s = s + "es";
        else s = s + 's';
        cout << s << endl;
        return 0;
    }
    

    B - Go to Jail

    /*
     * @Author       : nonameless
     * @Date         : 2020-09-19 20:05:42
     * @LastEditors  : nonameless
     * @LastEditTime : 2020-09-19 20:06:35
     */
    #include <bits/stdc++.h>
    #define x first
    #define y second
    #define pb push_back
    #define sz(x) (int)x.size()
    #define toStr(name) (#name)
    #define all(x) x.begin(), x.end()
    using namespace std;
    typedef long long ll;
    typedef pair<ll, ll> PLL;
    typedef pair<int, int> PII;
    typedef pair<double, double> PDD;
    const double eps = 1e-6;
    const double PI  = acos(-1.0);
    const int INF = 0x3f3f3f3f;
    const ll LNF  = 0x3f3f3f3f3f3f3f3f;
    inline int gcd(int a, int b) { return b ? gcd(b,a % b):a;}
    inline ll  gcd(ll  a, ll  b) { return b ? gcd(b,a % b):a;}
    inline int lcm(int a, int b) { return a * b / gcd(a, b); }
    
    template<class T>
    inline void read(T &x){
        x = 0;
        int f = 1;
        char c = getchar();
        while(c < '0' || c > '9')   { if(c == '-') f = -1;  c = getchar(); }
        while(c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); }
        x = x * f;
    }
    
    template<class T>
    inline void out(string a, T x){ cout << a << " = " << x << endl; }
    
    
    int main(){
    
        int n; cin >> n;
        int cnt = 0, mark = 0;
        for(int i = 1; i <= n; i ++){
            int x, y; cin >> x >> y;
            if(x == y) cnt ++;
            else cnt = 0;
            if(cnt == 3) mark = 1;
        }
        if(mark == 1) puts("Yes");
        else puts("No");
        return 0;
    }
    

    C - A x B + C

    /*
     * @Author       : nonameless
     * @Date         : 2020-09-19 20:07:49
     * @LastEditors  : nonameless
     * @LastEditTime : 2020-09-19 20:09:15
     */
    #include <bits/stdc++.h>
    #define x first
    #define y second
    #define pb push_back
    #define sz(x) (int)x.size()
    #define toStr(name) (#name)
    #define all(x) x.begin(), x.end()
    using namespace std;
    typedef long long ll;
    typedef pair<ll, ll> PLL;
    typedef pair<int, int> PII;
    typedef pair<double, double> PDD;
    const double eps = 1e-6;
    const double PI  = acos(-1.0);
    const int INF = 0x3f3f3f3f;
    const ll LNF  = 0x3f3f3f3f3f3f3f3f;
    inline int gcd(int a, int b) { return b ? gcd(b,a % b):a;}
    inline ll  gcd(ll  a, ll  b) { return b ? gcd(b,a % b):a;}
    inline int lcm(int a, int b) { return a * b / gcd(a, b); }
    
    template<class T>
    inline void read(T &x){
        x = 0;
        int f = 1;
        char c = getchar();
        while(c < '0' || c > '9')   { if(c == '-') f = -1;  c = getchar(); }
        while(c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); }
        x = x * f;
    }
    
    template<class T>
    inline void out(string a, T x){ cout << a << " = " << x << endl; }
    
    
    int main(){
    
        int n; cin >> n;
        ll ans = 0;
        for(int a = 1; a <= n; a ++)
            for(int b = 1; b <= n / a; b ++){
                int t = a * b;
                if(n - t > 0) ans ++;
            }
    
        cout << ans << endl;
    
        return 0;
    }
    

    D - Leaping Tak

    思路:

    (f[i]) 表示走到 (i) 的方案数。

    那么对于一个线段 ([a, b]),显然:(f[i] = f[i - b] + f[i-b+1] +...+f[i-a])

    显然这是一个关于 (f) 的前缀和数组。所以再加一个 (sum) 数组可以在线性时间内求出。

    代码:
    /*
     * @Author       : nonameless
     * @Date         : 2020-09-19 20:19:51
     * @LastEditors  : nonameless
     * @LastEditTime : 2020-09-19 20:30:48
     */
    #include <bits/stdc++.h>
    #define x first
    #define y second
    #define pb push_back
    #define sz(x) (int)x.size()
    #define toStr(name) (#name)
    #define all(x) x.begin(), x.end()
    using namespace std;
    typedef long long ll;
    typedef pair<ll, ll> PLL;
    typedef pair<int, int> PII;
    typedef pair<double, double> PDD;
    const double eps = 1e-6;
    const double PI  = acos(-1.0);
    const int INF = 0x3f3f3f3f;
    const ll LNF  = 0x3f3f3f3f3f3f3f3f;
    inline int gcd(int a, int b) { return b ? gcd(b,a % b):a;}
    inline ll  gcd(ll  a, ll  b) { return b ? gcd(b,a % b):a;}
    inline int lcm(int a, int b) { return a * b / gcd(a, b); }
    
    template<class T>
    inline void read(T &x){
        x = 0;
        int f = 1;
        char c = getchar();
        while(c < '0' || c > '9')   { if(c == '-') f = -1;  c = getchar(); }
        while(c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); }
        x = x * f;
    }
    
    template<class T>
    inline void out(string a, T x){ cout << a << " = " << x << endl; }
    
    const int K = 15, N = 2e5 + 10;
    
    const int mod = 998244353;
    
    ll f[N], sum[N];
    PII s[K];
    
    int main(){
    
        int n, k; cin >> n >> k;
        for(int i = 1; i <= k; i ++) cin >> s[i].x >> s[i].y;
        f[1] = 1;
        sum[1] = 1;
        for(int i = 2; i <= n; i ++){
            for(int j = 1; j <= k; j ++){
                int a = s[j].x, b = s[j].y;
                if(a >= i) continue;
                a = i - a;
                b = max(0, i - b - 1);
                f[i] = (f[i] + sum[a] - sum[b] + mod) % mod;
            }
            sum[i] = (sum[i - 1] + f[i]) % mod;
        }
        cout << f[n] << endl;
        return 0;
    }
    

    E - Sequence Sum

    思路:

    打表以下可以发现循环节,所以直接暴力找循环节就好。

    代码:
    /*
     * @Author       : nonameless
     * @Date         : 2020-09-19 20:36:30
     * @LastEditors  : nonameless
     * @LastEditTime : 2020-09-19 21:26:22
     */
    #include <bits/stdc++.h>
    #define x first
    #define y second
    #define pb push_back
    #define sz(x) (int)x.size()
    #define toStr(name) (#name)
    #define all(x) x.begin(), x.end()
    using namespace std;
    typedef long long ll;
    typedef pair<ll, ll> PLL;
    typedef pair<int, int> PII;
    typedef pair<double, double> PDD;
    const double eps = 1e-6;
    const double PI  = acos(-1.0);
    const int INF = 0x3f3f3f3f;
    const ll LNF  = 0x3f3f3f3f3f3f3f3f;
    inline int gcd(int a, int b) { return b ? gcd(b,a % b):a;}
    inline ll  gcd(ll  a, ll  b) { return b ? gcd(b,a % b):a;}
    inline int lcm(int a, int b) { return a * b / gcd(a, b); }
    
    template<class T>
    inline void read(T &x){
        x = 0;
        int f = 1;
        char c = getchar();
        while(c < '0' || c > '9')   { if(c == '-') f = -1;  c = getchar(); }
        while(c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); }
        x = x * f;
    }
    
    template<class T>
    inline void out(string a, T x){ cout << a << " = " << x << endl; }
    
    
    int main(){
    
        ll n, x, m, a;
        cin >> n >> x >> m;
        vector<ll> vec;
        map<ll, int> mp;
        ll idx = n;
        ll ans = 0;
        a = x;
        int yy = n;
        for(int i = 1; i <= n; i ++){
            yy = i;
            if(mp[a]) { idx = mp[a] - 1; break; }
            mp[a] = i;
            ans += a;
            vec.pb(a);
            a = a * a  % m;
        }
        vector<ll> vec2;
        for(int i = 0; i < sz(vec); i ++) if(i >= idx) vec2.pb(vec[i]);
        ll cnt = n - yy + 1;
        ll sum = 0;
        for(auto it : vec2) sum += it;
        if(sz(vec2)){
            ans += cnt / sz(vec2) * sum;
            for(int i = 0; i < cnt % sz(vec2); i ++) ans += vec2[i];
        } 
        cout << ans << endl;
        
        return 0;
    }
    
  • 相关阅读:
    Java异常的优势与缺陷,及其处理原则
    Kettle 4.2源码分析第四讲--KettleJob机制与Database插件简介(含讲解PPT)
    Kettle 4.2源码分析第三讲--Kettle 转换机制transformation介绍
    Kettle 4.2源码分析第二讲--Kettle插件结构体系简介
    Kettle 4.2源码分析第一讲--Kettle 简介
    pytorch one hot 的转换
    SQLSERVER类似于lastindexof的语句
    自定义省市选择器 微信小程序多列选择器
    王者荣耀伽罗壁纸
    微信小程序实现淡入淡出效果(页面跳转)
  • 原文地址:https://www.cnblogs.com/nonameless/p/13697742.html
Copyright © 2011-2022 走看看