zoukankan      html  css  js  c++  java
  • 切蛋糕

    问题描述

    一块边长是2L的正方形蛋糕落在坐标轴内,中心在原点上,现在你竖直切了m次,水平切了n次,中间还挖出了一个长度是2P的正方形的洞,洞的中心也在原点上。求最终蛋糕分成了几块。

    enter image description here

    输入格式

    输入cake.in共四行。

    第一行一个数L,第二行一个数P

    第三行n个数,表示水平切的位置

    第四行m个数,表示竖直切的位置

    输出格式

    一个数,表示最终那个蛋糕的个数

    样例输入

    5

    3

    1 -4

    1

    样例输出

    6

    数据范围

    30% 的数据 L,P≤10,1≤n,m≤2

    100%的数据 1≤L,P,1≤n,m≤100

    题解

    假设中间没有挖掉一个正方形的洞,那么,最终会有(n+1)*(m+1)个蛋糕。

    而事实上中间挖掉一个正方形的洞,这对答案会有什么影响呢?

    如图,

    有几个小蛋糕完全被正方形的洞覆盖了,这些蛋糕不能算入答案的总个数。

    假设水平切有px次经过挖掉的洞,竖直切有py次经过挖掉的洞,显然,完全被正方形覆盖的校蛋糕有(px-1)*(py-1)个;

    最终答案就是(n+1)*(m+1)减去完全被洞覆盖的蛋糕数。

     1 #include <string>
     2 #include <cstdio>
     3 int L,P,ans,x[105],y[105],xt,yt,px,py;
     4 bool visx[200],visy[200],vis;
     5 int main()
     6 {
     7     int res,i,j,f;
     8     char ch;
     9     bool fg,mak;
    10     scanf("%d%d
    ",&L,&P);
    11     for (ch=getchar();ch!='
    ';ch=getchar())
    12     {
    13         res=0;  f=1;
    14         while ((ch<'0' || ch>'9') && ch!='-' && ch!='
    ') ch=getchar();
    15         if (ch=='
    ') break;
    16         if (ch=='-') f=-1,ch=getchar();
    17         while (ch>='0' && ch<='9')
    18           res=res*10+ch-'0',ch=getchar();
    19         res*=f;
    20         if (!visx[res+100]) visx[res+100]=1,x[++xt]=res;
    21         if (ch=='
    ') break;
    22     }
    23     for (ch=getchar();ch!='
    ';ch=getchar())
    24     {
    25         res=0;  f=1;
    26         while ((ch<'0' || ch>'9') && ch!='-' && ch!='
    ') ch=getchar();
    27         if (ch=='
    ') break;
    28         if (ch=='-') f=-1,ch=getchar();
    29         while (ch>='0' && ch<='9')
    30           res=res*10+ch-'0',ch=getchar();        
    31         res*=f;
    32         if (!visy[res+100]) visy[res+100]=1,y[++yt]=res;
    33         if (ch=='
    ') break;
    34     } 
    35     for (i=1;i<=xt;i++) 
    36       if (-P<=x[i] && x[i]<=P)
    37         px++;
    38     for (i=1;i<=yt;i++)
    39       if (-P<=y[i] && y[i]<=P)
    40         py++;
    41     if (px<1) px=1;
    42     if (py<1) py=1;
    43     printf("%d",(xt+1)*(yt+1)-(px-1)*(py-1));
    44     return 0;
    45 }
  • 相关阅读:
    第一篇:理论篇
    day 3:注释,缩进
    HTML的报告
    SAP DIALOG屏幕新增搜索帮助
    财务凭证科目替代(未写完)
    表维护生成器本地转请求包
    web安全之SQL注入
    Ubuntu16.04 下安装Sublime Text 3
    ubuntu16.04 下安装配置python3.6
    Ubuntu 16.04 下安装 PyCharm
  • 原文地址:https://www.cnblogs.com/rabbit1103/p/9839313.html
Copyright © 2011-2022 走看看