Codeforces Round #725 (Div. 3) 题解

A - Stone Game

题目链接

答案

#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define x first
#define y second
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;

inline void solve(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        int minn=INT_MAX;
        int maxn=INT_MIN;
        int l,r;
        for(int i=1;i<=n;i++){
            int k;
            cin>>k;
            if(k>maxn){
                maxn=k;
                r=i;
            }
            if(k<minn){
                minn=k;
                l=i;
            }
        }
        if(l>r) swap(l,r);
        int a=l;
        int b=r-l;
        int c=n-r+1;
        int ans=a+b+c;
        int mi=max(max(a,b),c);
        //cout<<a<<" "<<b<<" "<<c<<endl;
        ans-=mi;
        cout<<ans<<endl;
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

B - Friends and Candies

题目链接

答案

#include <bits/stdc++.h>

#include <algorithm>
#include <iostream>
#define ll long long
#define mem(a, b) memset(a, b, sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i, a, b) for (auto i = a; i <= b; ++i)
#define bep(i, a, b) for (auto i = a; i >= b; --i)
#define lowbit(x) x&(-x)
#define PII pair<int, int>
#define x first
#define y second
#define PLL pair<ll, ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
using namespace std;

int dp[N];

inline void solve() {
    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        double num = 0;
        for (int i = 1; i <= n; i++) {
            cin >> dp[i];
            num += dp[i];
        }
        num = num * 1.0 / n;
        int temp = num;
        if (num > temp * 1.0) {
            cout << "-1" << endl;
            continue;
        }
        int tot = 0;
        for (int i = 1; i <= n; i++) {
            if (dp[i] > num) tot++;
        }
        cout << tot << endl;
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

C - Number of Pairs

题目链接

答案

#include <bits/stdc++.h>

#include <algorithm>
#include <iostream>
#define ll long long
#define mem(a, b) memset(a, b, sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i, a, b) for (auto i = a; i <= b; ++i)
#define bep(i, a, b) for (auto i = a; i >= b; --i)
#define lowbit(x) x&(-x)
#define PII pair<int, int>
#define x first
#define y second
#define PLL pair<ll, ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
using namespace std;

// vector<int>dp;
ll dp[N];

inline ll bnri(ll l, ll r, ll k) {
    while (l < r) {
        ll mid = (l + r + 1) / 2;
        if (dp[mid] < k)
            l = mid;
        else
            r = mid - 1;
    }
    return l;
}

inline void solve() {
    ll t;
    cin >> t;
    while (t--) {
        // dp.clear();
        ll n, l, r;
        cin >> n >> l >> r;
        ll k;
        for (ll i = 1; i <= n; i++) cin >> dp[i];  // cin>>k,dp.eb(k);
        // sort(dp.begin(),dp.end());
        sort(dp + 1, dp + 1 + n);
        ll res = 0;

        for (ll i = 1; i <= n; i++) {
            ll lr = 1;
            ll rr = i - 1;
            ll k = l - dp[i];
            ll s1 = bnri(0, rr, k);
            k = r - dp[i];
            ll s2 = bnri(0, rr, k);
            while (dp[s2 + 1] == k) s2++;
            while (s2 >= i) s2--;
            res += s2 - s1;
        }
        cout << res << endl;
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

D - Another Problem About Dividing Numbers

题目链接

答案

#include <bits/stdc++.h>

#include <algorithm>
#include <iostream>
#define ll long long
#define mem(a, b) memset(a, b, sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i, a, b) for (auto i = a; i <= b; ++i)
#define bep(i, a, b) for (auto i = a; i >= b; --i)
#define lowbit(x) x&(-x)
#define PII pair<int, int>
// #define x first
// #define y second
#define PLL pair<ll, ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 4e4 + 10;
const int M = 111;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
using namespace std;

bool vp[N];
int prime[N], tot;
map<int, int> vis;

inline void get_prime() {
    for (int i = 2; i < N; i++) {
        if (vp[i] == 0) {
            prime[tot++] = i;
            for (int j = i * i; j < N; j += i) {
                vp[j] = 1;
            }
        }
    }
}

inline int get(int k) {
    if (k == 1) return vis[1] = 0;
    if (vis[k]) return vis[k];
    int m = k, c = 0;
    for (int i = 0; i < tot; i++) {
        while (m % prime[i] == 0) {
            m /= prime[i];
            c++;
        }
        if (m == 1) return vis[k] = c;
    }
    return vis[k] = c + 1;
}

inline void solve() {
    get_prime();
    int t;
    cin >> t;
    while (t--) {
        int x, y, k;
        cin >> x >> y >> k;
        int l, r;
        if (x == y)
            l = 2;
        else if (x % y == 0 || y % x == 0)
            l = 1;
        else
            l = 2;
        r = get(x) + get(y);
        if (k >= l && k <= r)
            cout << "YES\n";
        else
            cout << "NO\n";
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

F - Interesting Function

题目链接

答案

#include <bits/stdc++.h>

#include <algorithm>
#include <iostream>
#define ll long long
#define mem(a, b) memset(a, b, sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i, a, b) for (auto i = a; i <= b; ++i)
#define bep(i, a, b) for (auto i = a; i >= b; --i)
#define lowbit(x) x&(-x)
#define PII pair<int, int>
#define x first
#define y second
#define PLL pair<ll, ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
using namespace std;

inline ll get(int k) {
    ll res = k;
    ll col = 1;
    k /= 10;
    while (k) {
        res += (k % 10) * col;
        col = col * 10 + 1;
        k /= 10;
    }
    return res;
}

inline void solve() {
    int t;
    cin >> t;
    while (t--) {
        ll x, y;
        cin >> x >> y;
        cout << get(y) - get(x) << endl;
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

E - Funny Substrings

题目链接

答案

#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define x first
#define y second
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;

ll sp[M];
string s[M];
string a,b,c,d,e;
map<string,int>mp;

inline ll get(string s){
    int len=s.size();
    ll res=0;
    for(int i=0;i<len-3;i++){
        string str="";
        for(int j=0;j<4;j++) str+=s[i+j];
        if(str=="haha") res++;
    }
    return res;
}

inline void solve(){
    int t;
    cin>>t;
    while(t--){
        mp.clear();
        int pos=0;
        mem(sp,0);
        int n;
        cin>>n;
        int key;
        for(int i=1;i<=n;i++){
            a=b=c=d=e="";
            cin>>a>>b;
            if(!mp[a]) mp[a]=++pos;
            key=mp[a];
            if(b[0]==':'){
                cin>>c;
                sp[key]=get(c);
                string temp=c;
                int len=temp.size();
                if(len<=3) s[key]=temp;
                else{
                    s[key]="";
                    s[key]+=temp[0];
                    s[key]+=temp[1];
                    s[key]+=temp[2];
                    s[key]+='x';
                    s[key]+=temp[len-3];
                    s[key]+=temp[len-2];
                    s[key]+=temp[len-1];
                }
            }
            else{
                cin>>c>>d>>e;
                string temp=s[mp[c]]+s[mp[e]];
                sp[key]=sp[mp[c]]+sp[mp[e]];
                sp[key]+=get(temp);
                //cout<<temp<<" "<<get(temp)<<endl;
                int len=temp.size();
                if(len<=3) s[key]=temp;
                else{
                    s[key]="";
                    s[key]+=temp[0];
                    s[key]+=temp[1];
                    s[key]+=temp[2];
                    s[key]+='x';
                    s[key]+=temp[len-3];
                    s[key]+=temp[len-2];
                    s[key]+=temp[len-1];
                }
            }
            if(i==n) cout<<sp[key]<<endl;
        }
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

G - Gift Set (补)

题目链接

答案

#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define x first
#define y second
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;

inline bool judge(ll x,ll y,ll a,ll b,ll n){
    ll l=0;
    ll r=n;
    while(l<=r){
        ll mid=l+r>>1;
        ll l1=mid;
        ll l2=n-mid;
        ll p1=l1*a+l2*b;
        ll p2=l1*b+l2*a;
        if(p1<=x&&p2<=y) return 1;
        if(p1>x){
            if(a>b) r=mid-1;
            else l=mid+1;
        }
        else{
            if(a>b) l=mid+1;
            else r=mid-1;
        }
    }
    return 0;
}

inline void solve(){
    ll t;
    cin>>t;
    while(t--){
        ll x,y,a,b;
        cin>>x>>y>>a>>b;
        ll l=0,r=1e9;
        ll res=0;
        while(l<=r){
            ll mid=l+r>>1;
            if(judge(x,y,a,b,mid)) res=mid,l=mid+1;
            else r=mid-1;
        }
        cout<<res<<endl;
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值