zoukankan      html  css  js  c++  java
  • Codeforces Round #667 (Div. 3) 题解

    好久没刷codeforces了,真菜

    A 水题

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
    #define L rt<<1
    #define R rt<<1|1
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    #define MOD (1e9 + 7)
    #define PII pair<int,int>
    typedef long long i64;
    using namespace std;
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int t;  cin >> t;
        i64 a,b;
        while(t--){
            cin >> a >> b;
            i64 dif = abs(a - b),ans = 0;
            if(dif % 10)
                ans = 1;
            ans += dif / 10;
            cout << ans << endl; 
        }
        return 0;
    }
    

      

    B 注意下 :俩个数和相同的情况下,差值越大乘积越小,因此贪心比较就好了

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
    #define L rt<<1
    #define R rt<<1|1
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    #define MOD (1e9 + 7)
    #define PII pair<int,int>
    typedef long long i64;
    using namespace std;
    i64 s(i64 a, i64 b, i64 x, i64 y, i64 n) {
    	i64 t=min(a-x, n);
    	a-=t;
    	n-=t;
    	t=min(b-y, n);
    	b-=t;
    	return a*b;
    }
    void solve() {
    	i64 a, b, x, y, n;
        cin >> a >> b >> x >> y >> n;
    	cout << (min(s(a, b, x, y, n), s(b, a, y, x, n))) << endl;
    }
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int t;  cin >> t;
        while(t--){
            solve();
        }   
        return 0;
    }
    

    C 贪心

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
    #define L rt<<1
    #define R rt<<1|1
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    #define MOD (1e9 + 7)
    #define PII pair<int,int>
    typedef long long i64;
    using namespace std;
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int t,n,x,y;  cin >> t;
        while(t--){
            cin >> n >> x >> y;//n - 1间隔
            vector<int> vec;
            int dif  = y - x,dic,step;
            for(dic = n-1;;--dic)//划分 n - 1,不满足
                if(dif % dic == 0){
                    step = dif / dic;
                    break;
                }
            for(int i=x;i<=y;i+=step)
                vec.push_back(i);
            for(int i=x-step;i>0;i-=step){
                if(vec.size() == n)
                    break;
                vec.push_back(i);
            }
            for(int i=y+step;;i+=step){
                if(vec.size() == n)
                    break;
                vec.push_back(i);
            }
            for(auto &val:vec)
                cout << val << " ";
            cout << endl;
        }    
        return 0;
    }
    View Code

    D 模拟题

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
    #define L rt<<1
    #define R rt<<1|1
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    #define MOD (1e9 + 7)
    #define PII pair<int,int>
    typedef long long i64;
    using namespace std;
    i64 to_10(int n){
        i64 num = 1;
        rep(i,n)
            num *= 10;
        return num;
    }
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int t,s,cnt,pos;  cin >> t;//cnt 代表之前的数字和
        string str;
        while(t--){
            cin >> str >> s;
            i64 ans = 0;
            cnt = 0, pos = 0;
            rep(i,SIZE(str)){
                if(cnt + (str[i] - '0') <= s){
                    ++pos;
                    cnt += (str[i] - '0');
                }else
                    break;
            }
            if(pos == SIZE(str)){
                cout << 0 << endl;
                continue;
            }
            int len = str.substr(pos).size();
            i64 num = atoll(str.substr(pos).c_str());
            ans += to_10(len) - num;
            if(cnt == s){
                Rep(i, pos, SIZE(str))
                    str[i] = '0';
                if(str[pos-1] != '9'){
                    int index = pos - 1 -1;
                    per(i,pos)
                        if(str[i] == '0')
                            --index;
                        else
                            break;
                    ++str[pos-1];//进位加上
                    if(index == -1)
                        ans += to_10(SIZE(str)) - atoll(str.c_str());
                    else
                        ans += to_10(SIZE(str) -  index - 1) - atoll(str.substr(index+1).c_str());
                }
            }
            cout << ans << endl;
        }
        return 0;
    }
    View Code

    E :点的坐标与y坐标无关,因此可以将所有的x点的坐标排序,枚举二分可以找到从每个小球开始的可以包含小球个数,但是第二块木板可以从后面的任何位置开始,因此需要存储后面的最大值

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
    #define L rt<<1
    #define R rt<<1|1
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    #define MOD (1e9 + 7)
    #define PII pair<int,int>
    typedef long long i64;
    using namespace std;
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int t,n,k;  cin >> t;
        while(t--){
            cin >> n >> k;
            vector<int> x(n),y(n),dp(n+1,0);
            for(auto &val:x)
                cin >> val;
            for(auto &val:y)
                cin >> val;
            sort(x.begin(),x.end());
            per(i, n){
                int nowx = x[i] +k;
                int index = upper_bound(x.begin(),x.end(),nowx) - x.begin();
                dp[i] = max(dp[i+1], index - i);  
            }
            int ans = 0;
            rep(i, n){
                int nowx = x[i] + k;
                int index = upper_bound(x.begin(),x.end(),nowx) - x.begin();
                ans = max(ans, index - i + dp[index]);
            }
            cout << ans << endl;
        }
        return 0;
    }
    

    F: 统计个数,由题可知 个数为 每个t[1]字符的t[0]字符的和,可以改变任意字符,因此考虐从头到尾进行dp,因为只有前面状态确定了才可以进行统计

    一共存在三种状态

    s[i] 不发生变化

    当 发生变化的次数小于k:

    s[i] -> t[0]

    s[i] -> t[1]

    具体见代码

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
    #define L rt<<1
    #define R rt<<1|1
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    #define MOD (1e9 + 7)
    #define PII pair<int,int>
    typedef long long i64;
    using namespace std;
    const int maxn = 256;
    int dp[maxn][maxn][maxn];
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int n,k;    string s,t;
        while(cin >> n >> k >> s >> t){
            memset(dp,-1,sizeof(dp));
            dp[0][0][0] = 0;
            for(int i=0;i!=n;++i){
                for(int j=0;j<=k;++j){
                    for(int cnt0 = 0;cnt0 <= n;++cnt0){
                        if(dp[i][j][cnt0] == -1)
                            continue;
                        bool e0 = s[i] == t[0];
                        bool e1 = s[i] == t[1];
                        bool e01 = t[0] == t[1];
                        dp[i+1][j][cnt0 + e0] =  max(dp[i+1][j][cnt0 + e0], dp[i][j][cnt0] + (e1? cnt0 : 0));//不变
                        if(j < k){
                            dp[i+1][j+1][cnt0 + 1] = max(dp[i+1][j+1][cnt0 +1], dp[i][j][cnt0] + (e01? cnt0 : 0));//变为t0
                            dp[i+1][j+1][cnt0 + e01] = max(dp[i+1][j+1][cnt0 + e01] , dp[i][j][cnt0] + cnt0);//变为t1
                        }
                    }
                }
            }
            int ans = 0;
            for(int i=0;i<=k;++i)
                for(int j =0;j<=n;++j)
                    ans = max(ans, dp[n][i][j]);
            cout << ans << endl;
        }        
        return 0;
    }
    

      

     

  • 相关阅读:
    redis数据淘汰策略(转)
    maven中的dependencyManagement
    分布式事务(三)mysql对XA协议的支持
    分布式事务(四)简单样例
    多个@bean无法通过@resource注入对应的bean(org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected single matching bean but found )
    分布式事务(二)Java事务API(JTA)规范
    分布式事务(一)原理概览
    一台电脑支持2个git账号:gitlab+github
    单表千万级数据迁移实践方案-乞丐版,不使用大数据平台
    logback root level logger level 日志级别覆盖?继承?
  • 原文地址:https://www.cnblogs.com/newstartCY/p/13659450.html
Copyright © 2011-2022 走看看