A - Cakeminator
就是直接找能通到底的直線,然後標記一下就計數。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
int main()
{
int n,m,i,j,v[11][11],f,w=0;
char a[11][11];
cin>>n>>m;
for(i=0; i<n; ++i)
{
for(j=0; j<m; ++j)
{
cin>>a[i][j];
}
}
memset(v,0,sizeof(v));
for(i=0; i<n; ++i)
{
f=0;
for(j=0; j<m; ++j)
{
if(a[i][j]=='S')
{
f=1;
}
}
if(f==0)
{
//cout<<1<<endl;
for(j=0; j<m; ++j)//標記
{
v[i][j]=1;
}
}
}
for(j=0; j<m; ++j)
{
f=0;
for(i=0; i<n; ++i)
{
if(a[i][j]=='S')
{
f=1;
}
}
if(f==0)
{
for(i=0; i<n; ++i)
{
v[i][j]=1;
}
}
}
for(i=0; i<n; ++i)
{
for(j=0; j<m; ++j)
{
if(v[i][j]==1)//計數
{
w++;
}
}
}
cout<<w<<endl;
return 0;
}
B - Road Construction
由於0<=m<n/2,所以必然存在至少一個點可以和所有點連接。special judge直接YY。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
int map[1001];
int main()
{
int n,m,i,j,k,f;
int x,y;
cin>>n>>m;
cout<<n-1<<endl;
for(i=0; i<m; ++i)
{
cin>>x>>y;
map[x]=map[y]=1;
}
for(i=1;i<=n;++i)
{
if(map[i]==0)//找特殊點
{
f=i;
break;
}
}
for(i=1;i<=n;++i)
{
if(i==f)
{
continue;
}
cout<<i<<' '<<f<<endl;//直接連接所有
}
return 0;
}
C - Purification
看起來是很深的算法搜索題,其實它所求的最小值就是n。然後只要判斷有1到多行和1到多列全是‘E’,這兩個條件必須同時滿足才輸出-1,其它情況只要遍歷每行,輸出第一個空點座標就行。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
char Map[1111][1111] ;
int r[1111] ;
int l[1111] ;
int main()
{
int n,i,j;
scanf("%d",&n);
for (i=1; i<=n; i++)
{
for (j=1; j<=n; j++ )
{
scanf("%c",&Map[i][j]);
if(Map[i][j] == 'E')
{
r[i] ++ ;
l[j] ++ ;
}
}
}
int f= 0 ;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
if(r[i]==n&&l[j]==n)
{
f=1;
}
}
}
if(flag)
{
printf("-1\n");
}
else
{
int num1=0;
int num2=0 ;
for(i=1; i<=n; i++)
{
if(r[i]!=n)
{
num1++;
}
if(l[i]!=n)
{
num2 ++ ;
}
}
if(num1==n)
{
for(i=1; i<=n; i++)
{
int ff=0;
for (j=1; j<=n; j++)
{
if(Map[i][j] == '.')
{
cout<<i<<" "<<j<<endl;
ff = 1 ;
}
if(ff)
{
break;
}
}
}
}
else if(num2 == n)
{
for (i=1; i<=n; i++)
{
int ff=0;
for (j=1; j<=n; j++)
{
if(Map[j][i]=='.')
{
cout<<j<<" "<<i<<endl;
ff=1;
}
if(ff)
{
break;
}
}
}
}
}
return 0;
}