[铁一中OI模拟赛]2017.8.19 Day1

T1 小Z的情书

题目链接

思考:

题目主要难度在于旋转后的位置如何,在手写了样例之后不难发现规律。

#include <cstdio>
#include <cstring>

#define up(a,b,c) for(register int c=a;c<=b;++c)
#define down(a,b,c) for(register int c=a;c>=b;--c)

const int Maxn=1005;

int n;
bool Map[Maxn][Maxn],Use[Maxn][Maxn];
char Letter[Maxn][Maxn];

void init(){
    scanf("%d",&n);
    up(1,n,i){
        char s[Maxn];
        scanf("%s",s+1);
        up(1,n,j){
            if(s[j]==‘O‘) Map[i][j]=1;
        }
    }

    up(1,n,i){
        scanf("%s",Letter[i]+1);
    }
}

void Run(bool Map[1005][1005]){
    up(1,n,i){
        up(1,n,j){
            if(Map[i][j]) printf("%c",Letter[i][j]);
        }
    }
}

void XuanZhuan(){
    up(1,n,i){
        up(1,n,j){
            Use[j][n+1-i]=Map[i][j];
        }
    }
}

void Fuck(){
    up(1,n,i){
        up(1,n,j){
            Map[j][n+1-i]=Use[i][j];
        }
    }
}
int main(){
    freopen("loveletter.in","r",stdin);
    freopen("loveletter.out","w",stdout);
    init();
    Run(Map);
    XuanZhuan();
    Run(Use);
    Fuck();
    Run(Map);
    XuanZhuan();
    Run(Use);
    return 0;
}

T2 小Z的笔记

题目链接

思考:

待更~

T3 小Z的栈函数

题目链接

思考:

大模拟题目,放到T3真的好吗?

两个易错点:

1.栈中数字出现大雨1e9的

2.栈中为空,但是却要取出数字。

附上我260的代码。。

  1 #include <cstdio>
  2 #include <algorithm>
  3 #include <cstring>
  4 #include <string>
  5 #include <stack>
  6 #include <cmath>
  7 #include <iostream>
  8
  9 using namespace std;
 10
 11 struct node{
 12     long long num;
 13     string Code;
 14 }Run[2005];
 15 stack<long long>st;
 16 int tot,n;
 17 bool flag;
 18 bool made;
 19
 20
 21 inline bool Can(){
 22     if(st.empty()) return false;
 23     else return true;
 24 }
 25
 26 inline void PrintError(){
 27     cout<<"ERROR"<<endl;
 28     made=1;
 29     return;
 30 }
 31
 32 void NUM(long long x){
 33     st.push(x);
 34 }
 35
 36 void INV(){
 37     if(Can()){
 38         long long x = st.top();
 39         st.pop();
 40         st.push(-x);
 41     }
 42     else{
 43         PrintError();
 44     }
 45 }
 46
 47 void POP(){
 48     if( Can() ) st.pop();
 49     else PrintError();
 50 }
 51
 52 void DUP(){
 53     if( Can() ){
 54         long long x = st.top();
 55         st.push(x);
 56     }
 57     else PrintError();
 58 }
 59
 60 void ADD(){
 61     if( Can() ){
 62         //cout<<"!!!!!"<<st.size()<<endl;
 63         long long x = st.top();
 64         st.pop();
 65         if( Can() ){
 66             //cout<<st.size()<<endl;
 67             long long y = st.top();
 68             long long tot = x+y;
 69             st.pop();
 70             if(abs(tot)>1000000000) {
 71             //cout<<"Fuck"<<endl;
 72             PrintError();
 73             return;
 74             }
 75             st.push(tot);
 76
 77         }
 78         else PrintError();
 79     }
 80     else PrintError();
 81 }
 82
 83 void MUL(){
 84     if( Can() ){
 85         long long x = st.top();
 86         st.pop();
 87         if( Can() ){
 88             long long y = st.top();
 89             long long tot = x*y;
 90             st.pop();
 91             if(abs(tot)>1000000000) {
 92             PrintError();
 93             return;
 94             }
 95             st.push(tot);
 96         }
 97         else PrintError();
 98     }
 99     else PrintError();
100 }
101
102 void DIV(){
103     if( Can() ){
104         long long x = st.top();
105         if(x==0){
106             PrintError();
107             return;
108         }
109         st.pop();
110         if( Can() ){
111             long long y = st.top();
112             long long tot = y/x;
113             st.pop();
114             if(abs(tot)>1000000000) {
115             PrintError();
116             return;
117             }
118             st.push(tot);
119         }
120         else PrintError();
121     }
122     else PrintError();
123 }
124
125 void MOD(){
126     if( Can() ){
127         long long x = st.top();
128
129         if(x==0){
130             PrintError();
131             return;
132         }
133
134         st.pop();
135         if( Can() ){
136             //cout<<st.size()<<" "<<"!!!!"<<endl;
137             long long y = st.top();
138             long long tot = y%x;
139             //cout<<tot<<" "<<"!!!!"<<endl;
140             st.pop();
141             if(abs(tot)>1000000000) {
142             PrintError();
143             return;
144             }
145             st.push(tot);
146         }
147         else PrintError();
148     }
149     else PrintError();
150 }
151
152 void SUB(){
153     if( Can() ){
154         long long x = st.top();
155         st.pop();
156         if( Can() ){
157             long long y = st.top();
158             long long tot = y-x;
159             st.pop();
160             if(abs(tot)>1000000000) {
161             PrintError();
162             return;
163             }
164             st.push(tot);
165         }
166         else PrintError();
167     }
168     else PrintError();
169 }
170
171 void SWP(){
172     if( Can() ){
173         long long x = st.top();
174         st.pop();
175         if( Can() ){
176             long long y = st.top();
177             st.pop();
178             st.push(x);
179             st.push(y);
180         }
181         else PrintError();
182     }
183     else PrintError();
184 }
185
186 void run(){
187     for(int i=1;i<=tot;i++){
188         //cout<<Run[50].Code<<endl;
189         if(Run[i].Code=="NUM"){
190             NUM(Run[i].num);
191         }
192         else if(Run[i].Code=="POP"){
193             POP();
194         }
195         else if(Run[i].Code=="INV"){
196             INV();
197         }
198         else if(Run[i].Code=="DUP"){
199             DUP();
200         }
201         else if(Run[i].Code=="SWP"){
202             SWP();
203         }
204         else if(Run[i].Code=="ADD"){
205             ADD();
206         }
207         else if(Run[i].Code=="SUB"){
208             SUB();
209         }
210         else if(Run[i].Code=="MUL"){
211             MUL();
212         }
213         else if(Run[i].Code=="MOD"){
214             MOD();
215         }
216         else if(Run[i].Code=="DIV"){
217             DIV();
218         }
219         if(made==1) return;
220     }
221     //cout<<st.size()<<"!!!!!"<<endl;
222
223     if(st.size()==1){
224         //cout<<"FFFFFFFFFFFFFF"<<endl;
225         cout<<st.top()<<endl;
226     }
227     else PrintError();
228 }
229
230 int main(){
231     std::ios::sync_with_stdio(false);
232     std::cin.tie(0);
233     string Start;
234     while(cin>>Start){
235         if(Start=="END") break;
236
237         if(Start=="NUM"){
238             long long fuck;
239             cin>>fuck;
240             if(abs(fuck)>1000000000) flag=1;
241             if(!flag) Run[++tot].num = fuck;
242             Run[tot].Code = Start;
243         }
244         else{
245             Run[++tot].Code= Start;
246         }
247     }
248     //cout<<Run[51].Code<<"!!!!"<<endl;
249     cin>>n;
250     while(n--){
251         made=0;
252         while(!st.empty()) st.pop();
253         long long x;
254         cin>>x;
255         if(abs(x)>1000000000){
256             PrintError();
257         }
258         else {
259             //cout<<st.size()<<"!!!!"<<endl;
260             st.push(x);
261             run();
262         }
263     }
264     return 0;
265 }

又长又臭的代码

整体思考

本次模拟赛难度整体为 普及+  ,但是个人在第2题DP发挥实在太烂,第三题细节没有考虑到。导致本次模拟赛110分。

看来多写题,多思考。少抄题解,多参加模拟赛才能治颓治弱啊~

时间: 2024-10-01 07:36:58

[铁一中OI模拟赛]2017.8.19 Day1的相关文章

[铁一中OI模拟赛]2017.8.20 Day2

T1 LGTB 玩扫雷 题目链接 思考: 纯模拟题,没啥说的. #include <cstdio> #include <cstring> #define up(a,b,c) for(register int c=a;c<=b;++c) int n,m,map[1005][1005]; char s[233]; int fx[]={0,0,-1,-1,-1,0,1,1,1},fy[]={0,-1,-1,0,1,1,1,0,-1}; int main(){ //freopen(&

[OI模拟赛]2017.8.24 Day5

A题 第K小的和 Tom有n个数字Ai,每个数字都不?一样.现在,Tom想把这些数字次数的选择,然后 把选定的数字求和,例如: Tom有2个数字,这2个数字分别是:3,5,那么,他能够组成的数字有: 3,5,6,8,9,10,11,12… 现在,他好奇组成的和中,第k?小的是多少,你能告诉他么? 输?入格式: 第?一?行两个正整数n,k表?示Tom?手上数字的个数,以及要求的是第?几?小的数字. 第?二?行n个正整数Ai,表?示Tom?手上每个数字的值. 输出格式: ?一个正整数,表?示第k?小

NOIP模拟赛(2017.9.15) -餐厅(restaurant)

餐厅(restaurant) [问题描述] 小R最近在玩一款模拟餐厅打工的游戏,其中有一个叠盘子的小游戏小R很喜欢.这个小游戏是这样的:有一个放盘子的机器会在一条直线上运动,机器里装着n个盘子,其中第i个盘子半径为ri,并且如果要放下该盘子,盘子的中心必须放在直线上xi的位置上,小R可以决定放下哪些盘子和放下这些盘子的顺序,盘子可以放在空位上,或者叠在一个上面没有其他盘子的盘子上,但要求被叠的盘子必须包含要叠上去的盘子.小R想要让叠出的盘子尽量高,请你计算出最高的一叠最多能叠几个盘子. [输入格

[计蒜客NOIP模拟赛]2017.7.28Day1回顾反思总结

D1T1 打地鼠 题目链接 反思- 比赛得分-0 思考: 比赛时,以为T1是一道常规模拟题目,没怎么看数据范围.直接手动模拟,模拟完之后太自信也没有造数据Hack自己的程序.直接导致爆0.同时发现自己对二维前缀和的学习也只是在皮毛之上,没有深入思考与理解. 解题思路- 将图像旋转45°之后用二维前缀和维护,每次O(1)查询,时间复杂度O(N*N). 但是目前觉得这个图像旋转45°难以理解,打算手动模拟加深理解. 标程 #include<bits/stdc++.h> using namespac

NOIP模拟赛(2017.9.15) -游戏(game)

游戏(game) [问题描述] 小R和小H在玩某个双人联机小游戏,一开始两人所操控的角色各有1点力量值,而在游戏中,每通过一关都会掉落一些力量强化道具.奇怪的是,明明是双人小游戏,每关却都会掉落3个相同的力量强化道具,于是两人决定每关每人先拿一个,剩下一个猜拳决定给谁.一个力量强化道具能使一个角色的力量值变为原来的若干整数倍,同一关卡掉落的道具倍率都相同,而不同的关卡可能不同.小R从攻略上找到了一些会产生特殊效果的力量值组合,他想知道哪些组合是按他们的道具分配方式有可能在通过某关时达成的. [输

【前行】◇第3站◇ 国庆训练营&#183;OI制模拟赛

[第3站] 国庆训练营·OI制模拟赛Ⅰ 怀着冲刺提高组400的愿望来到这个very small but very interesting 的训练营QwQ 在北大dalao的带领下开始了第一场OI模拟赛[炸心态ヽ(*.>Д<)o゜] ? 简单总结 感觉非常爆炸…… 第一题还好,一眼看出结论题,所以开始打表……没想到只打出来了一种情况(为什么全是特殊情况),然后就凉了. 第二题就开始崩溃了.首先画图思考了大概20分钟……然后发现想不出正解,就开始想要骗分.看了看数据阶梯,发现自己好像只能做前1/3

2017.11.25【NOIP提高组】模拟赛A组

2017.11.25[NOIP提高组]模拟赛A组 T1 3467. [NOIP2013模拟联考7]最长上升子序列(lis) T2 3468. [NOIP2013模拟联考7]OSU!(osu) T3 3472. [NOIP2013模拟联考8]匹配(match) T1 有转移方程f[i]=max{f[j]}+1,a[j]<a[i] 可以用线段树+离散化维护这个方程,因为涉及以往状态可以用主席树维护 打太丑爆空间了 Code 1 #include<cstdio> 2 #include<c

2017.6.11 校内模拟赛

题面及数据及std(有本人的也有原来的) :2017.6.11 校内模拟赛 T1 自己在纸上模拟一下后就会发现 可以用栈来搞一搞事情 受了上次zsq 讲的双栈排序的启发.. 具体就是将原盘子大小copy一下排个序 用两个指针维护两个数组(原数据 和 排序后的数据), 即分为1数据和2数组 将小于1指针指向的数据的2数组中的数据全部压入栈中 后进行消除, 将栈栈顶元素与当前1数组中的1指针指向的元素进行比较 相同则消除 后重复过程 直至指针超过N 后判断一下是否两个指针都超过了N... #incl

2017.12.02【NOIP提高组】模拟赛A组

2017.12.02[NOIP提高组]模拟赛A组 T1 3555[GDKOI2014模拟]树的直径 T2 3542[清华集训2014]冒泡排序 T3 3486[NOIP2013模拟联考10]道路改建(rebuild) T1 树直径的一个性质,两棵树合并,形成新的树的直径的两个端点为原树中的四个端点之二. 可以用反证法证明.用此性质本题就变成了lca裸题了 Code #include<cstdio> #include<cstring> #include<cmath> #i