Problem A Spotlights

这题是Codeforces 729B

题目描述

给出一个 01 矩阵,每个 0 的上下左右四个方向上有 1 的方向数称为它的价值,请你求出这个矩阵中所有 0 的价值之和。

代码

#include <bits/stdc++.h>
using namespace std;
const int MAXN=1005;
int main(){
#ifndef OFF_LINE
    freopen("matrix.in","r",stdin);
    freopen("matrix.out","w",stdout);
#endif
    ios::sync_with_stdio(false);
    int n,m,ans=0;
    bool a[MAXN][MAXN];
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(!a[i][j]){
                //Left
                for(int x=i-1;x>0;x--){
                    if(a[x][j]){
                        ans++;
                        break;
                    }
                }
                //Right
                for(int x=i+1;x<=n;x++){
                    if(a[x][j]){
                        ans++;
                        break;
                    }
                }
                //Up
                for(int x=j-1;x>0;x--){
                    if(a[i][x]){
                        ans++;
                        break;
                    }
                }
                //Left
                for(int x=j+1;x<=m;x++){
                    if(a[i][x]){
                        ans++;
                        break;
                    }
                }
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

Problem B

这题是Codeforces 582B

代码

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int a[10005],f[10005],b[305];
int main()
{
    int n,t,i,j;
    cin>>n>>t; 
    int len=n*min(n,t); 
    for (i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        b[a[i]]++;
    }
    int mxa=1;
    for(i=n+1;i<=len;i++)
    a[i]=a[i-n];
    for (i=1;i<=len;i++)
    {
        f[i]=1;
        for (j=i-1;j>=max(i-n,1);j--)
        {
            if (a[i]>=a[j])
            f[i]=max(f[i],f[j]+1);
        }
        mxa=max(mxa,f[i]);
    }
    if (n>=t)
    cout<<mxa<<endl;
    else
    {
        int mxaa=0;
        for(i=0;i<305;i++)
        mxaa=max(mxaa,b[i]);
        cout<<mxa+mxaa*(t-n)<<endl;
    }
    return 0;
} 

Problem C

这题是Codeforces 580D

代码

Last modification:January 19, 2020
如果您觉得我的文章有用,给颗糖糖吧~