1 条题解
-
0
自动搬运
来自洛谷,原作者为

老彩笔
鱼对水说你看不到我的眼泪,因为我在水里。水说我能感觉到你的眼泪,因为你在我心里。搬运于
2025-08-24 21:33:36,当前版本为作者最后更新于2019-09-08 16:16:24,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这题不好处理的地方就在如何判断x轴和y轴的位置,因为情况很多:
1.两个石子(即两个点)的位置没有覆盖坐标轴
- 两个石子里有一个覆盖了坐标轴
3.两个石子里有两个覆盖了坐标轴
………
开始我想用两个连续的1来判断:
if(c[i][j]=='1'&&c[i][j-1]=='1')xz=i; if(c[i][j]=='1'&&c[i-1][j]=='1')yz=j;然后发现他死了,下面这种情况就不能判断了:
0x0 1x1 010然后我改了一下,我想用一个1加一个0来判断:
if(c[i][j]=='1'&&c[i-1][j]=='0')xz=i; if(c[i][j]=='1'&&c[i][j-1]=='0')yz=j;然后他又死了,下面这种情况就死了:
x000000 x111111 1000000 1000000 1000000 1000000 1000000最后改进了一下,让他即判断左边,还判断右边,就A了:
if(!c1&&c[i][j]=='1'&&c[i-1][j]=='0')xz=i,c1=1;//加上两个bool判断防止重复修改 if(!c2&&c[i][j]=='1'&&c[i][j-1]=='0')yz=j,c2=1; if(!c1&&c[i][j]=='0'&&c[i-1][j]=='1')xz=i-1,c1=1; if(!c2&&c[i][j]=='0'&&c[i][j-1]=='1')yz=j-1,c2=1;输出函数的时候还需要特判两个常函数:
1.如果两个点x坐标相等那么输出x=b;
2.如果两个点y坐标相等那么输出y=b;
3.其他输出y=kx+b;
下面是代码,里面有解释:
#include<bits/stdc++.h> using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10-48+ch;ch=getchar();} return x*f; } const int maxn=105; char c[maxn][maxn]; int n,xz,yz;//xz是x轴,yz是y轴 double xl,xr,yl,yr; bool jd1;//记录是否已经找到了1个点 bool c1,c2;//分别记录是否找到了x轴和y轴 int main() { n=read(); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>c[i][j]; if(!c1&&c[i][j]=='1'&&c[i-1][j]=='0')xz=i,c1=1;//x轴 if(!c2&&c[i][j]=='1'&&c[i][j-1]=='0')yz=j,c2=1;//y轴 if(!c1&&c[i][j]=='0'&&c[i-1][j]=='1')xz=i-1,c1=1;//x轴 if(!c2&&c[i][j]=='0'&&c[i][j-1]=='1')yz=j-1,c2=1;//y轴 if(c[i][j]=='x')//找到了石子 { //如果不用一个bool变量记录也可以用数组来保存 if(!jd1)//如果没有找到了第一个石子 { xl=j; yl=i; jd1=1; } else //如果已经找到了第一个石子就记录第二个 { xr=j; yr=i; } } } } //因为上面只记录了在数组里面的位置 //这里要处理出实际位置 //若有不懂大家可以手模一下 xl-=yz; xr-=yz; yl=xz-yl; yr=xz-yr; //下面是分情况讨论 if(xl==xr) { cout<<"x="; printf("%.4lf\n",xl); return 0; } double k,b; k=(yr-yl)/(xr-xl); cout<<"y="; if(k!=0)printf("%.4lfx",k); else { printf("%.4lf\n",yl); return 0; } b=yl-k*xl; if(b>0)cout<<'+';//如果b小于0就不用输出+ if(b!=0)printf("%.4lf\n",b); //如果b等于0就什么也不做 return 0; }
- 1
信息
- ID
- 1032
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者