Diamond A&B(1)
题目背景
由于本题较难,将本题拆做两题,分别为 diamond A 以及 diamond B。本题为 Diamond A。
题目描述
教主上电视了!这个消息绝对是一个爆炸性的新闻。一经传开,大街上瞬间就没人了(都回家看电视去了),商店打烊,工厂停业。大家都把电视机的音量开到最大,教主的声音回响在大街小巷。
小 L 给小 X 慌乱地打开自己家的电视机,发现所有频道都播放的是教主的采访节目(-_-bbb)。只见电视屏幕上的教主笑意吟吟,给大家出了一道难题:
一个边长为 n n n 的大菱形被均匀地划分成了 n × n n\times n n×n 个边长为 1 1 1 的小菱形组成的网格,但是网格中部分边被抹去了,小 L L L 想知道,大菱形内有多少个平行四边形,这些平行四边形内不存在边(平行四边形内是空的)。
教主说,如果谁写出了程序,移动用户请将程序发送到 xxxx,联通用户请将程序发送到 xxxx……如果答对这个题,将有机会参加抽奖,大奖将是教主签名的 Orz 教主 T-Shirt 一件!这个奖品太具有诱惑力了。于是你需要编一个程序完成这么一道题。
输入格式
输入的第一行为一个正整数 n n n,为大菱形的边长。
以下 2 n 2n 2n 行,每行 2 n 2n 2n 个字符,字符为空格, / \verb!/! /, \ \verb!\! \ 中的一个。
前 n n n 行,第 i i i 行中居中有 2 i 2i 2i 个字符,这 2 i 2i 2i 个字符中位置为奇数的字符只可能为 / \verb!/! / 或者空格,位置为偶数的字符只可能为 \ \verb!\! \ 或空格,若为空格表示这样一条边不存在,其余字符均为空格,描述了大菱形的上半部分。
后 n n n 行,第 i i i 行居中有有 2 ( n − i + 1 ) 2(n-i+1) 2(n−i+1) 个字符,与上半部分类似地描述了菱形的下半部分。
输入文件保证大菱形的轮廓上没有边被抹去。
输出格式
第一行一个整数 n n n。
以下 2 × n + 1 2\times n+1 2×n+1 行,改为矩形后各边的输出, 1 1 1 表示有边, 0 0 0 表示无边。
样例 #1
样例输入 #1
4
/\
/\/\
/\ /\
/ \/ \
\/\/ / /
\/\ /
\ \/
\/
样例输出 #1
4
1111
11101
1000
10111
1100
10101
0111
11101
1111
提示
数据范围及约定
- 对于 20 % 20\% 20% 的数据, n ≤ 10 n \le 10 n≤10;
- 对于 40 % 40\% 40% 的数据, n ≤ 60 n \le 60 n≤60;
- 对于 60 % 60\% 60% 的数据, n ≤ 200 n \le 200 n≤200;
- 对于 100 % 100\% 100% 的数据, n ≤ 888 n \le 888 n≤888。
C++实现
#include<bits/stdc++.h>
using namespace std;
int n,m,o,x,y;
string s[1900];
int main()
{
scanf(“%d”,&n); //cin >> n;
printf(“%d\n”,n); //cout << n << endl;
m = 2 * n + 1;
while(m–) getline(cin,s[++o]);//o++,getline(cin,s[o]);
for(int i = 1;i <= 2 * n + 1;i++)
{
m = n,x = 1 + (i + 1) / 2,y = n - i / 2;
if(i % 2 == 0) m++;
while(m–)
{
if(s[x++][y++] == ’ ') printf(“0”);
else printf(“1”);
}
cout << endl;
}
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
标签:空格,Diamond,信奥,++,60,le,教主,菱形,打卡 From: https://blog.csdn.net/rogeliu/article/details/143659840