- wsh 的博客
8月week2Day 4总结
- @ 2024-8-23 14:58:16
作者附:
今天AK啦 hhhhh ✌✌✌✌
T1 填涂颜色
总结(自己)
找公式用了50分钟 暴力写了30分钟 找规律20分钟 但这样其实挺好的(至少不会错)
思路
找规律 没思路q(≧▽≦q)
附Ac代码:
#include<bits/stdc++.h>
using namespace std;
void fio(string a)
{
string s1=a+".in",s2=a+".out";
freopen(s1.c_str(),"r",stdin);
freopen(s2.c_str(),"w",stdout);
}
int main()
{
fio("color");
long long n,m,k,ans;
cin>>n>>m>>k;
if(k>=n&&k>=m) ans=n*m;
else if(m<=k) ans=m*k;
else ans=k*k;
cout<<ans;
return 0;
}
T2密码
总结(自己)
乱A 简单 送分(好像不该这么轻视题目哈)
思路
可以打表 但其实就是密文往后推密钥-1个字母就行
附Ac代码(巨简单):
#include<bits/stdc++.h>
using namespace std;
void fio(string a)
{
string s1=a+".in",s2=a+".out";
freopen(s1.c_str(),"r",stdin);
freopen(s2.c_str(),"w",stdout);
}
int main()
{
fio("vigenere");
string k,a;
cin>>k>>a;
for(int i=0;i<a.size();i++){
char ax,dx;
int j=i%k.size();
if(k[j]<='z'&&k[j]>='a') dx='a';
else dx='A';
if(a[i]<='z'&&a[i]>='a') ax='a';
else ax='A';
cout<<char(((a[i]-ax)-(k[j]-dx)+26)%26+ax);
}
return 0;
}
T3海港
总结(自己)
海港拖了蛮久(我觉得自己的只定hh好像有点乱)
思路
滑动窗口+桶(还要加一个变量记录国家数 不然超时)
附Ac代码:
#include<bits/stdc++.h>
using namespace std;
int n,hh=1,dl[100010],b[100010],t[100010],ks[100010],zs;
vector<vector<int> > k;
void qc(int i)
{
i--;
for(int j=0;j<k[i].size();j++){
b[k[i][j]]--;
if(b[k[i][j]]==0) zs--;
}
}
void fio(string a){
string s1=a+".in",s2=a+".out";
freopen(s1.c_str(),"r",stdin);
freopen(s2.c_str(),"w",stdout);
}
int main()
{
fio("port");
cin>>n;
for(int i=1;i<=n;i++){
cin>>t[i]>>ks[i];
vector<int> s;
for(int j=1;j<=ks[i];j++){
int u;
cin>>u;
s.push_back(u);
if(b[u]==0) zs++;
b[u]++;
}
k.push_back(s);
while(abs(t[i]-t[hh])>=86400){
qc(hh);
hh++;
}
cout<<zs<<endl;
}
return 0;
}
T4流星雨
总结(自己)
对bfs还不够熟练 一开始下意识就是dfs 写完发现超时 只能拿78分 赶紧改了bfs(改完考试只剩5分钟了) 吓s我了
思路
广搜模板
附Ac代码:
#include<bits/stdc++.h>
using namespace std;
int f[5][2]={{1,0},{0,1},{-1,0},{0,-1}};
int n,b[1010][1010],l[1010][1010],x,y,t;
queue<int> xdl;
queue<int> ydl;
queue<int> bsdl;
void bfs()
{
while(!xdl.empty()){
int x=xdl.front();
xdl.pop();
int y=ydl.front();
ydl.pop();
int bs=bsdl.front();
bsdl.pop();
for(int i=0;i<4;i++){
int nx=x+f[i][0],ny=y+f[i][1];
if(nx<0||ny<0||nx>301||ny>301) continue;
if(l[nx][ny]<=bs+1&&l[nx][ny]!=0x3f3f3f3f) continue;
if(b[nx][ny]>bs+1){
b[nx][ny]=bs+1;
xdl.push(nx);
ydl.push(ny);
bsdl.push(bs+1);
}
}
}
}
void fio(string a){
string s1=a+".in",s2=a+".out";
freopen(s1.c_str(),"r",stdin);
freopen(s2.c_str(),"w",stdout);
}
int main()
{
fio("meteor");
memset(b,0x3f,sizeof b);
memset(l,0x3f,sizeof l);
cin>>n;
for(int i=1;i<=n;i++){
cin>>x>>y>>t;
l[x][y]=min(t,l[x][y]);
l[x+1][y]=min(t,l[x+1][y]);
if(x-1>=0) l[x-1][y]=min(t,l[x-1][y]);
l[x][y+1]=min(t,l[x][y+1]);
if(y-1>=0) l[x][y-1]=min(t,l[x][y-1]);
}
xdl.push(0);
ydl.push(0);
bsdl.push(0);
bfs();
int ans=1e9;
for(int i=0;i<=301;i++){
for(int j=0;j<=301;j++){
if(l[i][j]==0x3f3f3f3f&&b[i][j]!=0x3f3f3f3f) ans=min(ans,b[i][j]);
}
}
if(ans==1e9) cout<<-1;
else cout<<ans;
return 0;
}