作者提醒:本天为大模拟专题,不会给思路,请自行按照题目模拟。

T1T1

考试错误:一味地去追求max\max,就没有考虑在边界上安装,导致错误。

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=150;
struct P{
    int x,y,t;
};
P a[N];
signed main(){
	freopen("fsz.in","r",stdin);
	freopen("fsz.out","w",stdout);
	int d,n;
	cin >> d >> n;
	for(int i=1;i<=n;i++){
		cin >> a[i].x >> a[i].y >> a[i].t;
	}
	int mx=0,op=0;
	for(int i=0;i<=128;i++){
		for(int j=0;j<=128;j++){
			int sum=0;
			for(int k=1;k<=n;k++){
				if(abs(i-a[k].x)<=d&&abs(j-a[k].y)<=d) sum+=a[k].t;
			}
			mx=max(mx,sum);
		}
	}for(int i=0;i<=128;i++){
		for(int j=0;j<=128;j++){
			int sum=0;
			for(int k=1;k<=n;k++){
				if(abs(i-a[k].x)<=d&&abs(j-a[k].y)<=d) sum+=a[k].t;
			}
			if(sum==mx) op++;
		}
	}
	cout << op << " " << mx;
}

T2T2

考试错误:无。

注:此题为小WW的病毒歼灭战原题。

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1050;
int hh=N/2,tt=hh-1;
int a[N],mm[N];
signed main(){
	freopen("fyj.in","r",stdin);
	freopen("fyj.out","w",stdout);
    int m,n;
    cin >> m >> n;
    int cnt=0;
    for(int i=1;i<=n;i++){
        cin >> a[i];
        int flag=1;
        for(int j=hh;j<=tt;j++){
            if(mm[j]==a[i]) flag=0;
        }
        if(flag){
            cnt++;
            if(tt-hh+1==m) hh++;
            mm[++tt]=a[i];
        }
    }
    cout << cnt;
}

T3T3

考试错误:在p1=2p_1=2时没考虑两边都是数字的情况,每次无脑的-32,导致有一个测试点不对,只得了9090分。

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
bool pd(char c){
	return c>='a'&&c<='z';
}
char pd2(char c){
	if(c>='a'&&c<='z') c-=32;
	return c;
}
signed main(){
	freopen("zfc.in","r",stdin);
	freopen("zfc.out","w",stdout);
	int p1,p2,p3;
	cin >> p1 >> p2 >> p3;
	string s;
	cin >> s;
	s=" "+s+" ";
	for(int x=1;x<s.size()-1;x++){
		if(s[x]!='-') cout << s[x];
		else{
			if(isdigit(s[x-1])&&isdigit(s[x+1])&&s[x+1]-s[x-1]>0||pd(s[x-1])&&pd(s[x+1])&&s[x+1]-s[x-1]>0){
				if(p3==1){
					for(char i=s[x-1]+1;i<=s[x+1]-1;i++){
						for(int j=1;j<=p2;j++){
							if(p1==2){
								cout << pd2(i);
							}else if(p1==3){
								cout << "*";
							}else{
								cout << char(i);
							}
						}
					}
				}
				else if(p3==2){
					for(char i=s[x+1]-1;i>=s[x-1]+1;i--){
						for(int j=1;j<=p2;j++){
							if(p1==2){
								cout << pd2(i);
							}else if(p1==3){
								cout << "*";
							}else{
								cout << char(i);
							}
						}
					}
				}
			}else{
				cout << s[x];
			}
		}
	}
}

T4T4

考试错误:没做。

注:本题的模拟有亿点点长

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=550;
struct PII{
	int id,t;
};
int ord[N],step[N],last[N],tim[34][7000];
PII a[N][N];
int ans;
signed main(){
	freopen("jq.in","r",stdin);
	freopen("jq.out","w",stdout);
    int m,n;
    cin >> m >> n;
    for(int i=1;i<=n*m;i++){
        cin >> ord[i];
    }for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin >> a[i][j].id;
        }
    }
	for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin >> a[i][j].t;
        }
    }
    for(int i=1;i<=n*m;i++){
        int now=ord[i];
        int k=++step[now];
        int x=a[now][k].id;
        int tm=a[now][k].t;
        int s=0;
        for(int j=last[now]+1;;j++){
            if(tim[x][j]==0) s++;
            else s=0;
            if(s==tm){
                for(int q=j-s+1;q<=j;q++){
                	tim[x][q]=1;
					last[now]=q;
					ans=max(ans,q);
            	}
                break;
            }
        }
    }
    cout << ans;
    return 0;
}