其实“模拟题”是送分题
例1 https://www.acwing.com/problem/content/415/
分析:对输入内容统计即可,利用数组记录得分情况。
同时记录一共打了几球。
code:
#include <iostream>
#include <cmath>
using namespace std;
int f[2]={11,21};//两种赛制的获胜得分
int m[25*2500+10],n=0;
int main()
{
char tmp;
while(1)
{
cin>>tmp;//不断输入
if(tmp=='E') break;
else if(tmp=='W') m[n++]=1;//华华赢
else if(tmp=='L') m[n++]=0;//华华输
}
for(int k=0;k<2;k++)
{//两种赛制循环
int w=0,l=0;
for(int i=0;i<n;i++)
{
w+=m[i];l+=1-m[i];
if(max(w,l)>=f[k]&&abs(w-l)>=2)
{//获胜者超过对应分且超出对手2分
cout<<w<<':'<<l<<endl;
w=l=0;
}
}
cout<<w<<':'<<l<<endl;//未完成也要输出
cout<<endl;
}
return 0;
}
其实思路很简单,但有几点要注意:
1.数组开够 2.读到E要停止 3.分差2分以上才结算 4.最后输出正在进行的比赛
例2 https://www.acwing.com/problem/content/description/464/
直接上代码:
#include <iostream>
using namespace std;
const int dx[]={1,1,1,0,0,-1,-1,-1};
const int dy[]={-1,0,1,-1,1,-1,0,1};
const int maxn=105;
char g[maxn][maxn];
int n,m;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>g[i][j];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
if(g[i][j]!='*')
{
int cnt=0;
for(int k=0;k<8;k++)
if(g[i+dx[k]][j+dy[k]]=='*')
cnt++;
cout<<cnt;
}
else cout<<'*';
cout<<endl;
}
return 0;
}
例3 https://www.acwing.com/problem/content/524/
枚举4种情形,可得:
#include <iostream>
#include <string>
using namespace std;
const int MAXN=1e6+5;
struct node
{// 存姓名和方向
int head;
string name;
}a[MAXN];
int n,m,x,y;
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>a[i].head>>a[i].name;
int now=0;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
if(a[now].head==0&&x==0) //情形1
now=(now+n-y)%n;
else if(a[now].head==0&&x==1) //情形2
now=(now+y)%n;
else if(a[now].head==1&&x==0) //情形3
now=(now+y)%n;
if(a[now].head==1&&x==1) //情形4
now=(now+n-y)%n;
}
cout<<a[now].name<<endl;
return 0;
}
可以向我分享更精简的代码哈~
写在后面的话
上面3道题难度很低。。。
下面有几道鉴赏题(from luogu,个人觉得很难):
1.猪国杀 https://www.luogu.com.cn/problem/P2482
2.立体图 https://www.luogu.com.cn/problem/P3326
3.杀蚂蚁 https://www.luogu.com.cn/problem/P2586
4.琪露诺的冰雪小屋 https://www.luogu.com.cn/problem/P3693
我不确定是否有人把题看完。。。
END