Codeforces Round #590 (Div. 3) 训练总结及A-F题解

总结:A5mins ac,B过的慢22mins ac,接着就被c卡了一小时1小时ac,写到了d题,因为打星练了下手速,无板子17mins ac还算不错,e是个差分,f思维题。
总结:

  1. C题想多一点,就节省了很多代码量。
  2. E题要静下心写。

题解:
A.
题意:00个货物,价格不一。使所有货物价格变为一个价格,且新总价格>=原sum且要求变动最小。
思路:-1找到平均值+1
代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define forn(i,n) for(int i=0;i<n;i++)
#define for1(i,n) for(int i=1;i<=n;i++)
#define IO ios::sync_with_stdio(false);cin.tie(0)
const int inf = 2e9+5;
const ll INF = 2e18+5;

int main(){
   
    IO;cout.precision(10);cout<<fixed;  
    int t;cin>>t;
    while(t--){
   
        int n;cin>>n;
        int sum = 0;
        forn(i,n){
   
            int x;cin>>x;
            sum+=x;
        }
        sum--;
        sum/=n;
        sum++;
        sum;
        cout<<sum<<'\n';
    }
    return 0;
}

B.
题意:2e5个数,你的显示器每次只能显示k个数,按顺序来如果新来的数字在显示器上,则不更新显示器,如果超过k个数,挤掉显示器进入最早的数。
思路:维护一个set来确定进不进,维护一个deque来确定删哪个。
代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define forn(i,n) for(int i=0;i<n;i++)
#define for1(i,n) for(int i=1;i<=n;i++)
#define IO ios::sync_with_stdio(false);cin.tie(0)
const int inf = 2e9+5;
const ll INF = 2e18+5;

int main(){
   
    IO;cout.precision(10);cout<<fixed;  
    set<int>s;
    deque<int>ans;
    int n,k;cin>>n>>k;
    forn(i,n){
   
        int x;cin>>x;
        if(s.find(x)!=s.end()) continue;
        if(ans.size()<k){
   
            s.insert(x);
            ans.push_back(x);
            continue;
        }
        int y = ans.front();ans.pop_front();
        s.erase(s.find(y));
        s.insert(x);ans.push_back(x);
    }
    cout<< ans.size() <<'\n';
    while(!ans.empty()){
   
        cout<<ans.back()<<' ';
        ans.pop_back();
    }
    return 0;
}

C
题意:如图从左上走到右下,地图大小2*n(n2e5),每个管道可以旋转。问能否走出去。在这里插入图片描述
思路:bfs或者按顺序走就可以。
代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define forn(i,n) for(int i=0;i<n;i++)
#define for1(i,n) for(int i=1;i<=n;i++)
#define IO ios::sync_with_stdio(false);cin.tie(0)
const int inf = 2e9+
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值