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。
代码
版权声明:本文是原创文章,版权归 星雾月雨 所有。
本文链接:https://www.ariels.xyz/archives/278.html
本站所有下方标记为「允许规范转载」的原创文章均采用 署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。
您可以自由地转载,但请务必注明文章来源且不可用于商业目的。