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的笔记
思考:
dp[i]表示前i个字符串最大保留数 last是每个字母保留的最大数量
#include <cstdio> #include <algorithm> #include <cstring> #define up(a,b,c) for(register int c=a;c<=b;++c) int n,m,last[100005],dp[100005],Out,first[100005]; char s[100005],second[10]; bool vis[500][500]; int main(){ scanf("%d",&n); scanf("%s",s+1); for(int i=1;i<=n;i++) first[i] = s[i]-'a'; scanf("%d",&m); for(int i=1;i<=m;i++){ scanf("%s",second+1); vis[second[1]-'a'][second[2]-'a']=vis[second[2]-'a'][second[1]-'a']=1; } for(int i=1;i<=n;i++){ dp[i]=1; for(int j=0;j<26;j++) if(!vis[j][first[i]]) dp[i]=std::max(dp[i],last[j]+1); last[first[i]] = std::max(last[first[i]],dp[i]); Out = std::max(Out,dp[i]); } printf("%d\n",n-Out); return 0; }
T3 小Z的栈函数
思考:
大模拟题目,放到T3真的好吗?
两个易错点:
1.栈中数字出现大雨1e9的
2.栈中为空,但是却要取出数字。
附上我260的代码。。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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分。
看来多写题,多思考。少抄题解,多参加模拟赛才能治颓治弱啊~