小z的模拟赛第一题咋错了?
  • 板块学术版
  • 楼主_Bob_
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/11/1 13:02
  • 上次更新2023/11/5 09:19:06
查看原帖
小z的模拟赛第一题咋错了?
140621
_Bob_楼主2020/11/1 13:02

0分。。。

#include<bits/stdc++.h>
using namespace std;
int r,c,sr,sc,cnt,ans;
int gcd(int a,int b)
{
    if(b==0)    return a;
    return gcd(b,a%b);
}
int main()
{
    char temp;
    scanf("%d%d",&r,&c);
    int** dp=new int*[r+1];
    for(int i=0;i<=r;i++)
    {
        dp[i]=new int[c+1];
    }
    
    for(int i=1;i<=r;i++)
    {scanf("%c",&temp);
        for(int j=1;j<=c;j++)
        {
            scanf("%c",&temp);
            if(temp=='K')
            {       
                dp[i][j]=1;
                cnt++;
            }
            else if(temp=='S')
            {
                sr=i;
                sc=j;
            }
        }
        
    }
    scanf("%c",&temp);
    int k,xa,ya,tx,ty;
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=c;j++)
        {
            if(dp[i][j])
            {
                dp[i][j]=0;
                ans++;
                xa=sr-i;
                ya=sc-j;
                k=gcd(abs(xa),abs(ya));
                xa/=k;
                ya/=k;
                tx=sr;
                ty=sc;
                while(1)
                {
                    tx-=xa;
                    ty-=ya;
                    if(tx>r||ty>c||tx<1||ty<1)  break;
                    if(dp[tx][ty]){
                        dp[tx][ty]=0;
                        cnt++;
                    }
                    if(cnt==0)  break;
                } 
            if(cnt==0)  break;
            }
        }
        if(cnt==0)  break;
    }
    printf("%d",ans);
    for(int i=0;i<=r;i++)
        delete[] dp[i];
    delete[] dp;
    return 0;
}
2020/11/1 13:02
加载中...