[铁一中OI模拟赛]2017.8.19 Day1

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[铁一中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分。

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

以上是关于[铁一中OI模拟赛]2017.8.19 Day1的主要内容,如果未能解决你的问题,请参考以下文章

[洛谷0925]NOIP模拟赛 个人公开赛 OI

NOIP2017滚粗记

浅谈OI中的底层优化!

潍坊一中模拟赛10.2 妖精大作战

如何模拟代号一中的状态栏?

由一只辣鸡到苦苣的OI心路历程