码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #536 (Div. 2)

时间:2020-03-25 23:04:29      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:force   style   ace   std   lag   amp   include   new   避免   

Codeforces Round #536 (Div. 2)

A. Lunar New Year and Cross Counting

模拟,可以外加两行两列防止越界。

技术图片
#include <bits/stdc++.h>
using namespace std;
int dir[4][2]={{-1,-1},{-1,1},{1,-1},{1,1}};
int main()
{
    int n;cin>>n;
    char MP[n+2][n+2]={0};
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>MP[i][j];
    int cnt=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(MP[i][j]==X){
                bool flag=true;
                for(int k=0;k<4;k++){
                    int x=i+dir[k][0];
                    int y=j+dir[k][1];
                    if(MP[x][y]!=X) flag=false;
                }
                if(flag) ++cnt;
            }
    cout<<cnt<<"\n";
    return 0;
}
View Code

B. Lunar New Year and Food Ordering

模拟,构造结构体按题意排序,将排序后下标与原下标建立映射,另需记录已售完的最小下标避免重复遍历导致超时。

技术图片
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct DISH{
    int a,c,num;
};
int main()
{
    int n,m;cin>>n>>m;
    DISH dish[n];
    for(int i=0;i<n;i++) cin>>dish[i].a;
    for(int i=0;i<n;i++) cin>>dish[i].c;
    for(int i=0;i<n;i++) dish[i].num=i+1;
    sort(dish,dish+n,[&](DISH a,DISH b){
        return a.c==b.c?a.num<b.num:a.c<b.c;
    });
    map<int,int> _map;
    for(int i=0;i<n;i++) _map[dish[i].num]=i;
    int zero=0;
    for(int _=0;_<m;_++){
        int t,d;cin>>t>>d;
        int i=_map[t];
        long long cost=0;
        if(dish[i].a>=d){
            cost+=1LL*d*dish[i].c;
            dish[i].a-=d;
            d=0;
        }else{
            cost+=1LL*dish[i].a*dish[i].c;
            d-=dish[i].a;
            dish[i].a=0;
            for(int i=zero;i<n&&d>0;i++){
                int mi=min(d,dish[i].a);
                cost+=1LL*mi*dish[i].c;
                d-=mi;
                dish[i].a-=mi;
                if(dish[i].a==0) zero=i+1;
            }
        }
        cout<<(d>0?0:cost)<<"\n";
    }
    return 0;
}
View Code

C. Lunar New Year and Number Division

贪心,模拟,双指针。

技术图片
#include <bits/stdc++.h>
using namespace std;
long long sqr(int a[],int i,int j){
    return 1LL*(a[i]+a[j])*(a[i]+a[j]);
}
int main()
{
    int n;cin>>n;
    int a[n];for(int &i:a) cin>>i;
    sort(a,a+n);
    int i=0,j=n-1;
    long long sum=0;
    while(i<j){
        sum+=sqr(a,i,j);
        ++i,--j;
    }
    if(i==j) sum+=1LL*a[i]*a[i];
    cout<<sum<<"\n";
    return 0;
}
View Code

D. Lunar New Year and a Wander

注意每个点可以重复经过,所以可以用优先队列BFS,手动线性模拟是因为不是二分插入很容易超时。

技术图片
#include <bits/stdc++.h>
using namespace std;
const int M=1e6;
vector<vector<int>> e;
bool vis[M];
priority_queue<int,vector<int>,greater<int>> q;//前小后大
int main()
{
    int n,m;cin>>n>>m;
    e.resize(n+1);
    for(int i=0;i<m;i++){
        int u,v;cin>>u>>v;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    q.push(1);
    vis[1]=true;
    while(!q.empty()){
        int u=q.top();
        q.pop();
        cout<<u<< ;
        for(int v:e[u]){
            if(!vis[v]){
                q.push(v);
                vis[v]=true;
            }
        }
    }
    return 0;
}
View Code

 

Codeforces Round #536 (Div. 2)

标签:force   style   ace   std   lag   amp   include   new   避免   

原文地址:https://www.cnblogs.com/Kanoon/p/12571075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!