- wsh 的博客
8月DY5总结
- @ 2024-8-9 19:11:49
每日作者附:今天好多类似题(之前做过的)都没做出来呢 >:(
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时展开的头和尾不能变为*号,未处理的-和未展开的也不能变为*号
思路
主要难点在分类讨论
写一个函数来展开时有写细节要注意
展开的头和尾不能变为*号
未处理的"-"和未展开的也不能变为*号
然后遇到"-"号时如果前后两个字符相等且是同一种 那么就展开即可
附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;
}