每日作者附:今天好多类似题(之前做过的)都没做出来呢 >:(

T1发射站(模拟)

题目传送门

思路

暴力枚举每个位置所覆盖的公共场所个数即可

附AC代码:

#include<bits/stdc++.h>
using namespace std;
int d,n,wx[31],wy[31],z[31],ans,s;
void fropn(string a){
	string t1=a+".in",t2=a+".out";
	freopen(t1.c_str(),"r",stdin);
	freopen(t2.c_str(),"w",stdout);
}
int main()
{
	fropn("fsz");
	cin>>d>>n;
	for(int i=1;i<=n;i++){
		cin>>wx[i]>>wy[i]>>z[i];
	}
	for(int i=0;i<=128;i++){
		for(int j=0;j<=128;j++){
			int res=0; 
			for(int k=1;k<=n;k++){
				if(abs(wx[k]-i)<=d&&abs(wy[k]-j)<=d){
					res+=z[k];
				}
			}
			if(res>ans){
				ans=res;
				s=1;
			}
			else if(res==ans){
				s++;
			}
		}
	}
	cout<<s<<" "<<ans;
	return 0;
}

T2翻译鸡(模拟)

题目传送门

思路

小W的病毒歼灭战

#include<bits/stdc++.h>
using namespace std;
int dl[1100],ans,t[1100],tt=-1,hh,m,n;
void fropn(string a){
	string t1=a+".in",t2=a+".out";
	freopen(t1.c_str(),"r",stdin);
	freopen(t2.c_str(),"w",stdout);
}
int main()
{
	fropn("fyj");
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		int a;
		cin>>a;
		if(t[a]==0){
			ans++;
			if(tt-hh+1<m){
				dl[++tt]=a;
				t[a]=1;
			}
			else{
				t[dl[hh]]=0;
				hh++;
				dl[++tt]=a;
				t[a]=1;
			}
		}
	}
	cout<<ans;
	return 0;
}

T3字符串(模拟)

题目传送门

总结(自己)

思路错了 因该是从"-"号判断 我是从-号前面一个数判断的 而且在s1=3时展开的头和尾不能变为*号,未处理的-和未展开的也不能变为*号

思路

主要难点在分类讨论

写一个函数来展开s1==3s1==3时有写细节要注意

展开的头和尾不能变为*号

未处理的"-"和未展开的也不能变为*号

然后遇到"-"号时如果前后两个字符相等且是同一种 那么就展开即可

附Ac代码

#include<bits/stdc++.h>
using namespace std;
int s1,s2,s3;
string a;
void zk(char a,char b)
{
	if(s3==1){
		for(char i=a+1;i<b;i++){
			for(int j=1;j<=s2;j++){
				if(s1==3) cout<<'*';
				else if(s1==2&&i<='z'&&i>='a'){
					cout<<char(i-'a'+'A');
				}
				else cout<<i;
			}
		}
	}
	else{
		for(char i=b-1;i>a;i--){
			for(int j=1;j<=s2;j++){
				if(s1==3) cout<<'*';
				else if(s1==2&&i<='z'&&i>='a'){
					cout<<char(i-'a'+'A');
				}
				else cout<<i;
			}
		}
	}
}
void fropn(string a){
	string t1=a+".in",t2=a+".out";
	freopen(t1.c_str(),"r",stdin);
	freopen(t2.c_str(),"w",stdout);
}
int main()
{
	fropn("zfc");
	cin>>s1>>s2>>s3;
	cin>>a;
	int n=a.size();
	for(int i=0;i<n;i++){
		if(a[i+1]=='-'||a[i-1]=='-'){
			cout<<a[i];
			continue;
		}
		if(a[i]=='-'&&i<n-1&&i>=1){
			char z1=a[i-1],z2=a[i+1];
			if((isdigit(z1)&&isdigit(z2))||(islower(z1)&&islower(z2))){
				if(z1>=z2){
					cout<<a[i]<<a[i+1];
					i++;
				}
				else{
					zk(z1,z2);
				}
			}
			else{ 
				if(s1==3) cout<<'*';
				else cout<<a[i];
			}
		}
		else{
			if(a[i]=='-') cout<<'-';
			else cout<<a[i];
		}
	}
	return 0;
}

T4机器(模拟)

题目传送门

总结(自己)

花了大把时间来做这题 然后思路错了 : ( ) :

思路

有空就填

附Ac代码

#include<bits/stdc++.h>
using namespace std;
int ans,last[31],step[31],flag[31][7010],m,n,ori[410];
struct x
{
	int s,ji;
};
x a[410][410];
void fropn(string a){
	string t1=a+".in",t2=a+".out";
	freopen(t1.c_str(),"r",stdin);
	freopen(t2.c_str(),"w",stdout);
}
int main()
{
	fropn("jq");
	cin>>m>>n;
	for(int i=1;i<=n*m;i++){
		cin>>ori[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j].ji;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j].s;
		}
	}
	for(int i=1;i<=n*m;i++){
		int shu=0,b=ori[i];
		int x=++step[b],ji=a[b][x].ji;
		for(int j=last[b]+1;;j++){
			if(flag[ji][j]==0) shu++;
			else shu=0;
			if(shu>=a[b][x].s){
				last[b]=j;
				for(int k=j-a[b][x].s+1;k<=j;k++){
					flag[ji][k]=1;
					ans=max(k,ans);
				}
				break;
			}
		}
	}
	cout<<ans;
	return 0;
}