1908: 小火山的圍棋夢想
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 307 Solved: 80
SubmitStatusWeb Board
Description
Input
Output
Sample Input
Sample Output
HINT
Source
#include<stdio.h>
#include<string.h>
int dir[4][4]={{1,0},{0,1},{0,-1},{-1,0}},vis[100][100];
char a[110][110];
int m,n,flag=0;
void dfs(int x,int y)
{
int xx,yy;
for(int i=0;i<4;i++)
{
xx=x+dir[i][0];
yy=y+dir[i][1];
if(a[xx][yy]=='*'||vis[xx][yy])
continue;
if(xx<1||xx>=m-1||yy<1||yy>=n-1)
{
flag=0;//出界還沒遇到*說明沒被包圍,記錄flag=0,去除標記
return ;
}
vis[xx][yy]=1;//標記查過的四個方向,防止重複查詢
dfs(xx,yy);//向外搜索,直到找到包圍的*
if(!flag)//可以優化,減小時間複雜度
return ;
}
}
int main()
{
int t,z=0,i,j;
scanf("%d",&t);
while(t--)
{
z++;
scanf("%d%d",&m,&n);
for(i=0; i<m; i++)
{scanf("%s",a[i]);
}
printf("Case %d:\n",z);
for(i=1; i<m-1; i++)
{for(j=1; j<n-1; j++)
{
if(a[i][j]=='.')
{
flag=1;
memset(vis,0,sizeof(vis));//每次清零,使查過的可以繼續查詢
dfs(i,j);
if(flag)//標記成功的把.改爲*
a[i][j]='*';
}
}
}
for(i=0;i<m;i++)
{
printf("%s\n",a[i]);
}
}
}
1905: 小火山的跳子游戲
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 460 Solved: 105
SubmitStatusWeb Board
Description
Input
Output
對於每組數據,如果可以將這個棋盤上的每個數字都走過則輸出"Yes", 否則輸出"No"
Sample Input
Sample Output
HINT
Source
ps:找規律。。#include<stdio.h>
int gcd(int a,int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
int k=gcd((n-1),m);
if(k==1&&m%2!=0)//若m,n互質且m爲奇數輸出yes;
printf("Yes\n");
else
printf("No\n");
}
}
1913: 小火山的計算能力
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 481 Solved: 125
SubmitStatusWeb Board
Description
別人說小火山的計算能力不行,小火山很生氣,於是他想證明自己,現在有一個表達式,他想計算出來。
Input
首先是一個t(1<=20)表示測試組數。然後一個表達式,表達式長度不超過200,只有加法和減法,並且保證第一個字符不會是運算符號,最終結果小於2^63-1。
Output
輸出運算結果。
Sample Input
Sample Output
HINT
Source
ps:簡單的表達式求值。#include<stdio.h>
#include<string.h>
char a[120];
int main()
{
int t,f=2;
long long sum;
scanf("%d",&t);
while(t--)
{
scanf("%s",a);
int l=strlen(a);
a[l]='=';
long long num=0;
sum=0;
f=2;
for(int i=0;i<=l;i++)
{
if(a[i]>='0'&&a[i]<='9'&&f==2)
{sum=sum*10+(a[i]-'0');
}
if(a[i]>='0'&&a[i]<='9'&&f==1)
{
sum=sum*10-(a[i]-'0');
}
if(a[i+1]=='+'||a[i+1]=='-'||a[i+1]=='=')
num+=sum;
if(a[i]=='-')
{f=1;
sum=0;
}
if(a[i]=='+')
{f=2;
sum=0;
}
}
printf("%lld\n",num);
}
}