Codeforces Round #590 (Div. 3)

A:

注意:a题的题意即是直接找到平均值像上取整,而不是在原有的序列里面找第一个比它大的数。

求x/n的平均值向上取整 : (x+n-1)/n

B1/2:

题意:

(模拟操作) 给出长为n的序列,以及一个容量为k的序列容器。如果容器中已经装有则不再放入,如果没有且容器还未装满则填入,否则把最早放入容器的值拿出,并放入新的值。

所以就可以使用set来记录是否重复,deque进行双端队列出列操作。(算对stl的基本使用的复习了)

//模拟操作
#include <bits/stdc++.h>
using namespace std;
#define ios std::ios::sync_with_stdio(false) , std::cin.tie(0) , std::cout.tie(0)
set<int>qq;
depp<int>pp;
depp<int>::iterator it;
int a[105];
int main(){
    int n,k;
    cin>>n>>k;
    cin>>a[1];
    qq.insert(a[1]);
    pp.push_front(a[1]);
    for(int i=2;i<=n;i++){
        cin>>arr[i];
        if(qq.count(a[i])) continue;
        if(qq.count(a[i]) == 0&&qq.size()<k){
            qq.inset(a[i]);
            pp.push_front(a[i]);
        }else if(qq.count(a[i])==0&&qq.size()==k){
            it = pp.end(); it--;
            qq.erase(*it);
            pp.pop_back();
            pp.push_front(a[i]);
            qq.insert(a[i]);
        }
    }
    cout<<pp.size()<<endl;
    for(it = pp.size();it!=pp.end();it++){
        cout << *it <<" "endl;
    }
    return 0;
}
View Code

求x/n的平均值:(x+n-1)/n

C:

题意:

#include <bits/stdc++.h>
//问从左上到右下是否能够走通
//利用dfs进行搜索
//对于1,2管道只能从左到右(不能从上到下)
//建图向下为x正方向,向右为y正方向
//首先确定能够走的方向:x=1时,(向右,向下)
//x=2时,(向右向上)
using namespace std;
string pipe[2];
int flag ;
int n;
//to=1时向右,to=2向上,to=3向下
int getval(int x){
    if(x==1||x==2) return 1;
    else return 0;
}
//上下层,进入位置,进入方向
void dfs(int st,int pos,int to){
    int val = getval(pipe[st][pos]-'0');
    if(flag||(st==1&&pos==n&&to==1)) {flag = 1; return;}
    if(pos>n) return;
    if(val){
        if(to==1) dfs(st,pos+1,1);
        else return ;//走不通
    }else{
        if(st==0){
            //如果在当前块上向右,则转移到向下(接口)
            if(to==1){
                dfs(1,pos,3);
            }else if(to==2){
                dfs(0,pos+1,1);
            }
        }else{
            if(to==1){
                dfs(0,pos,2);
            }else if(to==3){
                dfs(1,pos+1,1);
            }
        }

    }
}
int main(){
    int q;
    cin>>q;
    while(q--){
        cin>>n;
        for(int i=0;i<2;i++){
            cin>>pipe[i];
        }
        flag = 0;
        dfs(0,0,1);
        if(flag) puts("YES");
        else puts("NO");
    }
    return 0;
}
View Code

 


 

posted @ 2019-10-13 18:08  Tianwell  阅读(130)  评论(0编辑  收藏  举报