洛谷 P2067 Cytus-Holyknight

题目背景

本人最初作

以此纪念伟大的ios、安卓、PSV平台音乐游戏《cytus》

后续将不断更新。

-------------Chapter V-1-------------

话说两位战士整天靠在一起好无聊啊,于是她们打算——玩游戏!(?)

她们就用剑画了一个十字架,然后开始抛石子,好好玩啊(???)

两个人每人有一个石子,当她们丢完后,正在自学数学的小蓝大叫:把他们连起来不就是一次函数吗!!

于是乎,她们就连了起来,然后她们开始计算。此时她们发现一个严重的问题——没有草稿纸!(这什么破问题= =)

由于脑补能力太低,她们只好让你来帮帮忙啦~

题目描述

给出图形(十字架可以视为x轴和y轴),请计算出函数解析式。

输入输出格式

输入格式:

 

第一行,一个正整数n,表示该图形大小是n*n;

接下来n行,每行n个字符,1表示坐标轴,x表示石子,0表示空地。

横行的1是x轴,竖列的1是y轴。

上下两行,左右两列的距离恒为1。

 

输出格式:

 

输出一行,即y=kx+b,或y=kx,y=b,x=b;(k,b为常数)

常数始终保留四位小数

 

输入输出样例

输入样例#1: 复制
3
010
111
x1x
输出样例#1: 复制
y=-1.0000

说明

切记要分类

数据不需判错

100%的数据,3<=n<=16(够水吧)

没学过函数的自己百度

思路:模拟。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
char s[10];
double x0,y0,a,b,c,d;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%s",s);int sum=0,sum2=0;
        for(int j=0;j<n;j++){
            if(s[j]=='1')    sum++;
            if(s[j]=='x')    sum2++;
            if(s[j]=='x')
                if(!a){ b=i;a=j+1; }
                else { d=i;c=j+1; }
        }
        if(sum==n)    y0=i;
        if(!y0&&sum2+sum==n)    y0=i;
        else if(sum==1&&sum2==0){
            for(int j=0;j<n;j++)
                if(s[j]=='1'){ x0=j+1;break; }
        }
    }
    b=y0-b;d=y0-d;a=a-x0;c=c-x0;
    if(a-c==0){ printf("x=%.4lf",a);return 0; }
    if(b-d==0){ printf("y=%.4lf",b);return 0; }
    double k=(b-d)*1.0/(a-c)*1.0;
    double B=b-a*k;
    if(B>0)    printf("y=%.4lfx+%.4lf",k,B);
    else  if(B<0)    printf("y=%.4lfx%.4lf",k,B);
    else if(B==0)    printf("y=%.4lfx",k);
}
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
原文地址:https://www.cnblogs.com/cangT-Tlan/p/7896310.html