冲刺Noip2017模拟赛8 解题报告——五十岚芒果酱

1、鼎纹

【问题描述】
据说鼎纹的 种制造 式是 铜模印出来的,这是我国古代劳动 智慧
的结晶。铜模印过的地 ,会留下深深的印记,经过时间的炼化,洗
练成历史的遗存。
聪明的古代劳动人民拥有一个 a 行 b 列的铜模,每个位置要么是 0(代表
这个点是平的),要么是 1(代表这个点是凸起的)。他们想造 个 n 行 m 列
的鼎 ,其中每个位置也都是 0 或 1,表示经过若干 次印后,每个位置的结果。
有一些要求。铜模是不能旋转和翻转的;在印的过程当中,铜模的凸起不
能出现在鼎面的外面(平的部分是可以出现在外面的),鼎面上的同一个位置
不能被多个凸起印下(在任意两次印时,鼎面上不存在一个点,使得这两次都
有铜模上为 1 的点覆盖它)。
请你判断这个鼎面能不能被印出来。
 【输入格式】
输入文件件名为 grain.in。
本题多测。
第一行,一个整数 T ,表示测试
点数量。接下来 T 个测试点,每
个测试点中:
第一行包含 4 个整数 n,m,a,b。
接下来 n 行 ,每行 m 个字符,描述鼎面 。“0”表示
平,“1”表示凸起。接下来 a 行,每行 b 个字符,
描述铜模。“0”表示平,“1”表示凸起。
【输出格式】
输出 件名为 grain.out。
共有 T 行 ,对于每个测试点,输出 “YES”(能)或“NO”(不能)。
 【样例】
grain.in
2
3 4 4 2
1100
0110
1100
10
01
10
00
2 2 2 2
11
11
01
10

grain.out
YES
NO
 【数据规模与约定】
对于 70% 的数据,n,m,a, b <= 50。
对于 100% 的数据,1 <= T <=10; 1<=n,m, a, b <= 1000。
【问题描述】
据说鼎纹的 种制造 式是 铜模印出来的,这是我国古代劳动 智慧
的结晶。铜模印过的地 ,会留下深深的印记,经过时间的炼化,洗
练成历史的遗存。
聪明的古代劳动人民拥有一个 a 行 b 列的铜模,每个位置要么是 0(代表
这个点是平的),要么是 1(代表这个点是凸起的)。他们想造 个 n 行 m 列
的鼎 ,其中每个位置也都是 0 或 1,表示经过若干 次印后,每个位置的结果。
有一些要求。铜模是不能旋转和翻转的;在印的过程当中,铜模的凸起不
能出现在鼎面的外面(平的部分是可以出现在外面的),鼎面上的同一个位置
不能被多个凸起印下(在任意两次印时,鼎面上不存在一个点,使得这两次都
有铜模上为 1 的点覆盖它)。
请你判断这个鼎面能不能被印出来。
 【输入格式】
输入文件件名为 grain.in。
本题多测。
第一行,一个整数 T ,表示测试
点数量。接下来 T 个测试点,每
个测试点中:
第一行包含 4 个整数 n,m,a,b。
接下来 n 行 ,每行 m 个字符,描述鼎面 。“0”表示
平,“1”表示凸起。接下来 a 行,每行 b 个字符,
描述铜模。“0”表示平,“1”表示凸起。
【输出格式】
输出 件名为 grain.out。
共有 T 行 ,对于每个测试点,输出 “YES”(能)或“NO”(不能)。
 【样例】
grain.in
2
3 4 4 2
1100
0110
1100
10
01
10
00
2 2 2 2
11
11
01
10

grain.out
YES
NO
 【数据规模与约定】
对于 70% 的数据,n,m,a, b <= 50。
对于 100% 的数据,1 <= T <=10; 1<=n,m, a, b <= 1000。

题目

tag:模拟

思路:题意一定要看懂哦。用铜模的1去消除鼎的1,铜模的每个1都必须找到对应的,最后要保证鼎的1被消完。暴力模拟能拿60分。通过观察我们发现,这个题目跟0没有什么关系,所以只要记录1的位置。那么消除呢,必须是两个矩阵偏左上角的1为起始点,如果不这样,就会有左上方多余的1没被消除。每次默认这两个1必须对上,然后用之前记录的铜模其他的1与起始1的相对位置去找。记得每行读入整个字符串不然scanf("%c")会T。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<cmath>
 6 #define maxn 1010
 7 using namespace std;
 8 int T,n,m,a,b,cnt1,cnt2,mp[maxn][maxn],x[maxn*maxn],y[maxn*maxn],X[maxn*maxn],Y[maxn*maxn];
 9 char ch[maxn];
10 void init()
11 {
12     for(int i=1;i<=n;++i)
13         for(int j=1;j<=m;++j)
14             mp[i][j]=0;
15     for(int i=1;i<=cnt1;++i) x[i]=y[i]=0;
16     for(int i=1;i<=cnt2;++i) X[i]=Y[i]=0;
17     cnt1=cnt2=0;
18 }
19 bool check(int xx,int yy)
20 {
21     mp[xx][yy]=0;
22     for(int i=2;i<=cnt2;++i){
23          int XX=xx+X[i],YY=yy+Y[i];
24          if(XX<1||XX>n||YY<1||YY>m||!mp[XX][YY]) return false;
25          mp[XX][YY]=0;
26     }
27     return true;
28 }
29 void solve()
30 {
31     init();
32     scanf("%d%d%d%d",&n,&m,&a,&b);
33     for(int i=1;i<=n;++i){
34         scanf("%s",ch+1);
35         for(int j=1;j<=m;++j){
36             if(ch[j]-‘0‘){
37                 x[++cnt1]=i;
38                 y[cnt1]=j;
39                 mp[i][j]=1;
40             }
41         }
42     }
43         //记录鼎的1
44     for(int i=1;i<=a;++i){
45         scanf("%s",ch+1);
46         for(int j=1;j<=b;++j){
47             if(ch[j]-‘0‘){
48                 X[++cnt2]=i;
49                 Y[cnt2]=j;
50             }
51         }//记录模的1
52     }
53     for(int i=2;i<=cnt2;++i){
54         X[i]-=X[1];
55         Y[i]-=Y[1];
56     }//模版的几个1到第一个1的距离
57     for(int i=1;i<=cnt1;++i)
58         if(mp[x[i]][y[i]])
59             if(!check(x[i],y[i])){
60                 puts("NO");
61                 return;
62             }
63     puts("YES");
64 }
65 int main()
66 {
67     //freopen("grain.in","r",stdin);
68     //freopen("grain.out","w",stdout);
69     scanf("%d",&T);
70     while(T--) solve();
71     return 0;
72 } 

2、看球赛

2200 年 里奥迪奥带领的十星巴西对战莱昂纳多带领的阿根廷的世界杯决赛马
上开始了!前来在巨型球场观看比赛的观众数不甚数,但是由于突如其来的系统
原因,大家不能网上购票,只能到售票窗口,排成长龙买票. 按售票处规定,每一个限购一张门票,且每一张门票 50 美元。 在排成长龙的球
迷中有 n 个人手持 50 美元,另外有 n 个人手持 100 美元。假设售票处开始的时
候没有零钱,试问这 2n 个球迷有多少种排队方式使得售票处不会出现找不出钱
的尴尬局面,导致拖延球迷看球时间。
【输入与输出说明】
输入两行,第一行一个正整数 T,表示数据个数。
第二行有 T 个正整数,n1,n2,....nT. 输出 T 行,每一行为被 10^9+7 模过的结果。
【样例输入1】
1
2
【样例输出1】
2
【样例输入2】
2
2 5
【样例输出2】
2
42
【样例说明】
例如当 n=2 时,用 A 表示手持面值 50 美元的球迷,用 B 表示手持面值为 100 美
元的球迷,则最多可得到以下两组不同的排队方式使得售票处不会出现找不出钱
的情况。
售票处 A A B B
售票处 A B A B
【数据范围】
对于 10% n <= 10, T <= 10
对于 20% n <= 15, T <= 10
对于 60% n <= 2000, T <= 10
对于其中 20% 2000 < n <= 10^7, T <= 3
对于其中 20% 10^7 < n <= 3*10^7, T = 1

题目

tag:数学

思路:裸的卡特兰数(可是我不会写啊,只能打表)。公式是C(2n,n)/(n-1)。注意要用逆元哦。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 const int mod=1e9+7;
 8 int T,n;
 9 int ksm(int x,int y)
10 {
11     int ret=1,b=y;
12     while(b)
13     {
14         if(b&1) ret=1ll*ret*x%mod;
15         x=1ll*x*x%mod;
16         b>>=1;
17     }
18     return ret;
19 }
20 int solve()
21 {
22     int ret1=1,ret2=1;
23     for(int i=2;i<=n;++i){
24         ret1=1ll*ret1*(n+i)%mod;
25         ret2=1ll*ret2*i%mod;
26     }
27     return 1ll*ret1*ksm(ret2,mod-2)%mod;
28 }
29 int main()
30 {
31     //freopen("football.in","r",stdin);
32     //freopen("football.out","w",stdout);
33     scanf("%d",&T);
34     while(T--){
35         scanf("%d",&n);
36         printf("%d\n",solve());
37     }
38     return 0;
39 }

3、靶形数独

单独拿出来写题解了,-->链接<--

芒果君:分割线懒得画=_= 最近好颓,真的很想改变现状,我不想做一个只会打表的OIer 要好好学习QAQ

时间: 2024-10-06 08:23:04

冲刺Noip2017模拟赛8 解题报告——五十岚芒果酱的相关文章

暑假第二次考试 冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱

题1 牛跑步(running) [题目描述] 新牛到部队,CG 要求它们每天早上搞晨跑,从 A 农场跑到 B 农场.从 A 农场到 B 农场中有 n-2 个路口,分别标上号,A 农场为 1 号,B 农场为 n 号,路口分别为 2...n-1 号,从 A 农场到 B 农场有很多条路径可以到达,而 CG 发现有的路口是必须经过的,即每条路径都经过的路口,CG 要把它们记录下来,这样 CG 就可以先到那个路口,观察新牛们有没有偷懒,而你的任务就是找出所有必经路口. [输入格式] 第一行两个用空格隔开的

冲刺Noip2017模拟赛6 解题报告——五十岚芒果酱

1.ksum(ksum) [问题描述] Peter喜欢玩数组.NOIP这天,他从Jason手里得到了大小为n的一个正整数 数组. Peter求出了这个数组的所有子段和,并将这n(n+1)/2个数降序排序,他想 知道前k个数是什么. [输入格式] 输入文件名为 ksum.in. 输入数据的第一行包含两个整数 n 和 k. 接下来一行包含 n 个正整数,代表数组. [输出格式] 输出文件名为 ksum.out. 输出 k 个数,代表降序之后的前 k 个数,用空格隔开. [输入输出样例] ksum.i

冲刺Noip2017模拟赛7 解题报告——五十岚芒果酱

1.二叉树(binary) 1.二叉树 (binary.cpp/c/pas) [问题描述] 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值: (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值: (3)左.右子树也分别为二叉排序树: (4)没有键值相等的结点. 完全二叉树:只有最下面的两层结点度能够小于2,并且最下面一层的结点 都集中在该层最左边的若干位置的二叉树. 图1中,(a)和(b)是完全二叉树,(c)和(

暑假第四次考试 冲刺Noip模拟赛4 解题报告——五十岚芒果酱

题1 韬韬抢苹果(apple) [问题描述] 又到了收获的季节,树上结了许多韬韬,错了,是许多苹果,有很多个小韬韬都来摘苹 果.每个韬韬都想要最大的苹果,所以发生了争执,为了解决他们的矛盾,出题人定了一项 特殊的规则,按体重的大小来定顺序,每一轮都是先由胖的先摘(照顾胖子),每个韬韬都 是很聪明的,不会错过眼前最大的苹果.现在问题来了,一共有 n 个苹果,m 个韬韬,要你 按原顺序输出每个韬韬可以抢到的苹果的总大小. [输入格式]apple.in 第一行两个数 n,m. 接下来一行 n 个数,分

CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告

T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7=3,3×5 mod 7=1.如果继续乘下去,就会陷入循环当中.萌蛋还发现,这个循环的长度经常会是φ(n),即小于n且与n互质的正整数的个数.例如,φ(7)=6,而上述循环的长度也是6,因为5,4,6,2,3,1共有6个数.再如n=6,那么5×5 mod 6=1.这个循环的长度很短,只有2,而恰好φ

【一个蒟蒻的挣扎】模拟赛2解题报告

---恢复内容开始--- 今天50分,我自闭 眼瞎看错了一道题,然后两道题的代码都出了点小毛病,自闭 真的竞赛我要这样可以收拾收拾退役了真的,眼睛不能这么瞎了考试莫得人帮忙改了 如果一切都没问题今天应该有130,啊!!!!!!!!!!!!!!!!! 今天两题可以用堆,一题模拟随便写写就过了,(所以我为什么考这么差) 进入正题 题目一览(其实就3道题)(CZR到底是谁这么爱数学和折磨我们) 24点 小游戏 中位数 题1. 24点 题目描述 1.1 Background CZR很喜欢学数学,但是他数

20161022 NOIP模拟赛 T2 解题报告

旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起点的距离为ai千米(ai为非负整数).不存在两个目的地和起点的距离相同. 从第i个目的地走到第j个目的地所走的路程为 |ai-aj|千米.我们把参观n个目的地的顺序称作一次“旅行”.lahub可以参观他想要参观的任意顺序,但是每个目的地有且只能被参观一次(参观顺序为n的排列). lahub把所有可能

CH Round #54 - Streaming #5 (NOIP模拟赛Day1)解题报告

最近参加了很多CH上的比赛呢~Rating--了..题目各种跪烂.各种膜拜大神OTZZZ T1珠 描述 萌蛋有n颗珠子,每一颗珠子都写有一个数字.萌蛋把它们用线串成了环.我们称一个数字串是有趣的,当且仅当它的第1位是2,且除了第1位以外的每一位都是3.例如,2,233,2333333都是有趣的数字串.现在,你可以从这串珠子的任意一颗开始读,沿着顺时针或逆时针方向,到任意一颗珠子停止.这样,你就可以读出一个数字串来.萌蛋想知道,所有能读出的有趣的数字串当中,最长的是哪一个数字串.当然,你也可能读不

2014 UESTC 暑前集训队内赛(1) 解题报告

A.Planting Trees 排序+模拟 常识问题,将耗时排一个序,时间长的先种,每次判断更新最后一天的时间. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define Mod 1000000007 #define INT 2147483647 #define pi acos(-1.0)