作者附:

今天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;
 }