头像

微风入我怀




离线:1小时前


最近来访(363)
用户头像
董-远
用户头像
y总的小迷弟
用户头像
炽热的
用户头像
L-China
用户头像
懒觉货拯救世界
用户头像
写了又忘
用户头像
奋伟
用户头像
井之上泷奈sakana
用户头像
刘华强很强
用户头像
吴梦涵2023
用户头像
xuxiangyun
用户头像
nya
用户头像
种花家的兔兔
用户头像
utt
用户头像
xYang_a0a1
用户头像
gxm_in
用户头像
Demon_
用户头像
巷口风铃
用户头像
𝓘𝓼𝓬𝓻𝓮𝓪𝓶_06
用户头像
shangshan

活动打卡代码 AcWing 4960. 子串简写

莫急莫急先读题,
仔细考虑不要急

/*
经典指针+二分 (比赛为什么想不出???) 仔细考虑不要急

*/

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=500010;
int a[N],b[N],z,y,ans;
string s,q,w;
int k;
signed main()
{ 
cin>>k;
cin>>s>>q>>w;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]==q[0])
        {
            z++; 
            a[z]=i+1;
        }
         if(s[i]==w[0])
        { 
            y++;
            b[y]=i+1;
        }
    }
    for(int i=1;i<=z;i++)
    {

        int l=1,r=y;
        while(l<r)
        {
            int mid=l+r>>1;
         int s=b[mid]-a[i]+1;
         if(s>=k)  r=mid ;  
            else  l=mid+1;  
        }
        if(b[l]-a[i]+1>=k)
        ans+=y-l+1;
    /*  for(int j=y;j>=1;j--)
        { // cout<<b[j];
            int s=b[j]-a[i]+1;

            if(s<k) break;

            ans++;
        }*/

    }
    cout<<ans;
    return 0;
}


活动打卡代码 AcWing 4959. 岛屿个数

/*
从最外面开始搜索
在地图周围一圈增加一圈0作为外海, dfs遍历外海每一个方格,
若与外海方格相邻的岛屿未被遍历过,那么这就是一个新的岛屿, 再用一个dfs去遍历这个岛。

海水 八方向搜索
陆地 4方向搜索
因此 只要海水搜8个方向 可以搜到的岛屿 都不在环内(如果在环内 海水是进不去的
如果搜到 搜到的岛屿 岛屿个数加一 再把它连接的岛屿都搜到 防止多次重复计算
*/

#include<bits/stdc++.h>
using namespace std;

const int N=110;
//海水偏移量
int dxx[]={-1,-1,0,1,1,1,0,-1},dyy[]={0,1,1,1,0,-1,-1,-1};
//岛屿偏移量
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
char ma[N][N];
int T,n,m,c;
bool st[N][N];//走过的标记 避免重复
typedef pair<int,int> PII;

//搜岛屿bfs板子
void bbfs(int x,int y)
{
    c++;//搜到的岛屿就是答案的其中一个
    queue<PII> q;
    q.push({x,y});
    st[x][y]=true;
    while(q.size())
    {
        auto t=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            int nx=t.first+dx[i],ny=t.second+dy[i];
            if(nx>=0&&nx<=n+1&&ny>=0&&ny<=m+1&&ma[nx][ny]=='1'&&!st[nx][ny])
            {
                q.push({nx,ny});
                st[nx][ny]=true;
            }
        }
    }
}

//正常搜海水bfs板子
void bfs(int x,int y)
{
    queue<PII> q;
    q.push({x,y});
    st[x][y]=true;
    while(q.size())
    {
        auto t=q.front();
        q.pop();
        for(int i=0;i<8;i++)
        {
            int nx=t.first+dxx[i],ny=t.second+dyy[i];
            if(nx>=0&&nx<=n+1&&ny>=0&&ny<=m+1&&!st[nx][ny])
            {
                if(ma[nx][ny]=='1')bbfs(nx,ny);//遇到岛屿就把岛屿都搜一遍 把搜到的标记一下
                else q.push({nx,ny}),st[nx][ny]=true;
            }
        }
    }
}

void solve()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>ma[i][j];
    bfs(0,0);//从外圈扩展海水搜索 避免卡图
}

int main()
{
    cin>>T;
    while(T--)
    {
        //多组数据测试 因此每次都要初始化
        c=0;
        memset(st,0,sizeof st);

        //这里就用到了 引申题里的一种新颖思路
        //在原地图外阔一圈海水
        //防止角落 岛屿卡住搜索的范围
        memset(ma,'0',sizeof ma);
        solve();
        cout<<c<<"\n";
    }
    return 0;
}



活动打卡代码 AcWing 4958. 接龙数列

莫急莫急先读题
仔细考虑不要急

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int t,a[N],c[10],f[N],z; //c[]存的数组是 可以拼接数字的 最大量 
int main()
{  ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>t;
for(int i=1;i<=t;i++)
{ cin>>a[i];
}
for(int i=1;i<=t;i++)
{
    int w=a[i]%10;//a[i]的尾巴数字 
    int s=0;
     while(a[i]) //a[i]的 头部数字 
     {
        s=a[i]%10;
        a[i]=a[i]/10;
     }
    f[i]=1+c[s];//此时数据 是 最大以s结尾的 最大数量+1 

    c[w]=max(c[w],f[i]);//更新c 
    z=max(z,f[i]);
}
cout<<t-z;


    return 0;
}


活动打卡代码 AcWing 4957. 飞机降落

/*
暴力解决 过12个点 不如dfs 剪枝
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int t,a[N];//全排列 a数组 实现结构体顺序排序 
struct  node{
        int a,b,c;
     };
node st[N];
int main()
{  ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
    cin>>t;
while(t--)
 { int flagg=0;
    int s; cin>>s;
 for(int i=1;i<=s;i++) 
{ a[i]=i;
    cin>>st[i].a>>st[i].b>>st[i].c;
}
    do
    { 
        int t=st[a[1]].a;// 第一架飞机下降时间 
    int flag=0;
        for(int i=1;i<=s;i++)
        {
            int z=a[i];
            int q=st[z].a,w=st[z].b,e=st[z].c;
            if(t>q+w) //如果超过时间 就错误 
            { flag=1;
            break;
             }
             else if(t<=q) t=q;//飞机下降时间大于当前时间 

            t=t+e;
         }  
         if(flag) continue;
         else 
         { flagg=1;
            cout<<"YES"<<endl; 
            break;
         }
     } while(next_permutation(a+1,a+1+s));//全排列 
    if(!flagg) cout<<"NO"<<endl; 
 }
    return 0;
}
*/

···

include[HTML_REMOVED]

include[HTML_REMOVED]

using namespace std;

int t,n,a[15][3];
bool st[15],flag;//st记录是否已经降落,flag标记是否降落完成

void dfs(int k,int last)//k表示已经降落的飞机数量,last表示上一架飞机降落完成的时间
{
if(k>=n)//已经全部降落
{
puts(“YES”);
flag=true;
}
if(flag) return;//已经完成就不再搜索

for(int i=1;i<=n;i++)//枚举每一种情况
{
    if(!st[i])//还没降落
    {
        if(a[i][1]<last) return;//如果最迟降落时间已经过去就不满足,剪掉
        st[i]=true;
        if(last<a[i][0]) dfs(k+1,a[i][0]+a[i][2]);//降落时间小于当前飞机的最早降落时间就等到了再降落
        else dfs(k+1,last+a[i][2]);//否则上一架完成这架立马降落
        st[i]=false;//还原现场
    }
}

}

int main()
{
cin>>t;
while(t–)
{
cin>>n;
memset(st,0,sizeof st);//设置为都未降落
flag=false;//还没完成

    for(int i=1;i<=n;i++)
    {
        cin>>a[i][0]>>a[i][1]>>a[i][2];
        a[i][1]+=a[i][0];//到达时间加上盘旋时间==最迟降落时间
    }

    dfs(0,0);
    if(!flag) puts("NO");//所有的情况都不满足
}

return 0;

}

···



活动打卡代码 AcWing 4956. 冶炼金属

/ 莫急莫急先读题
仔细考虑找条件
/

经典二分,,

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1e4 + 10;

int n;
int a[N], b[N];

bool check(int x)
{
    for (int i = 0; i < n; ++ i )
        if (a[i] / x != b[i])
            return false;
    return true;
}

int main()
{
    cin >> n;

    int rmax = 1e9;
    for (int i = 0; i < n; ++ i )
        cin >> a[i] >> b[i], rmax = min(rmax, a[i] / b[i]);  //rmax 就是最大值

    int l = 1, r = rmax;

    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid))
            r = mid;
        else
            l = mid + 1;
    }

    cout << l << ' ' << rmax << endl;

    return 0;
}



新鲜事 原文

y总期末保佑
图片 图片


活动打卡代码 AcWing 3512. 最短距离总和

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 510;

int n;
int d[N][N];

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= n; j ++ )
            scanf("%d", &d[i][j]);

    int res = 0;
    for (int k = n; k > 1; k -- )
        for (int i = 1; i <= n; i ++ )
            for (int j = i + 1; j <= n; j ++ )
            {
                if (d[i][j] > d[i][k] + d[k][j])
                    d[i][j] = d[j][i] = d[i][k] + d[k][j];
                if (i >= k && j >= k) res += d[i][j] * 2;
            }

    printf("%d\n", res);
    return 0;
}






题解来源:https://blog.csdn.net/qq_51282224/article/details/130560102
题单:https://codeforces.com/gym/104354/attachments/download/20061/statements_2.pdf
题目:https://codeforces.com/gym/104354/my
/
方便记忆
/


1.png

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector> 
/*
这个题关键点就是 知道a串最多有26个字母,超过26个字母一定会重复
同时注意,一旦发生重复后边也一定会重复,记得break
还要要特判一下s长度为1的情况
*/
using namespace std;
// 判断回文 
bool check(string s)
{
    for(int i = 0, j = s.size() - 1; i < j; i ++, j --)
        if(s[i] != s[j]) return false;
    return true;
}
void solve()
{
    string s; cin >> s;
    vector<int> cnt(26, 0);   //容器cnt存26个数据 初始化0,,数据下标0~25; 
    //cout<<cnt[0]<<"  "<<cnt[25]<<" "; 
    if(s.size() == 1) {
        cout << "NaN\n";
        return ;
    }
    // 最多26个字母,st代表后边回文字符串的开始位置 
    for(int st = 1; st <= 26; st ++)
    {
        // 之前的计数 
        int t = s[st - 1] - 'a';
        // 判断是否重复, 重复直接break 
        if(cnt[t])  {
            break;
        }
        cnt[t] ++;
        // 检查是否回文 
        if(check(s.substr(st))) //从下标st开始 复制到s中 
        {
            cout << "HE\n";
            return;
        }
    }
    cout << "NaN\n";
}
int main()
{
    int T; cin >> T;
    while(T --) solve();
}

第三题
3.png

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector> 
using namespace std;
/*
因为|s| = 1e6 每段长度1e3到1e4,直接暴力如果重复出现100次以上就判为No
*/
int main()
{
    string s; cin >> s;
    // 记录重复数量 
    int cnt = 0;
    string tar = s.substr(0, 1000);//从下标0开始 ,存1000个数据 
    for(int i = 0; i + 1000 < s.size(); i ++)
    {
        if(tar == s.substr(i, 1000)) //如果开头前1000个,在后续可以找到重复 
        {
            cnt ++;
            i += 1000;  //从下一个1000开始 
        }
    }
    if(cnt < 100) cout << "Yes\n";
    else cout << "No\n";
}

E
E.png

12.png

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
void solve()
{
    int n, m, x; cin >> n >> m >> x;
    vector<vector<int>> f(m + 1, vector<int>(x + 1)), g(f);
    vector<string> s(n + 1);
    for (int i = 1; i <= n; i++) cin >> s[i], s[i] = " " + s[i];
    int res = 0;
    // g 对应的其实就是 f[i-1][j][k] f对应 f[i][j][k]
    for (int i = 1; i <= n; i++) 
    {
        for (int j = 1; j <= m; j++) 
        {
            for (int k = 0; k <= x; k++) 
            {
                if (s[i][j] == '0') f[j][k] = max(f[j - 1][k], g[j][k]);
                else if (s[i][j] == '1') f[j][k] = max(f[j - 1][k], g[j][k]) + 1;
                else 
                {
                    if (k >= 1) f[j][k] = max(f[j - 1][k - 1] + 1, g[j][k - 1] + 1);
                    else f[j][k] = max(f[j - 1][k], g[j][k]);
                }
                if (i == n && j == m) res = max(res, f[j][k]);
            }
        }
        g = f;
    }
    cout << res << "\n";    
} 
int main() 
{
    int T; cin >> T;
    while(T --) solve();
}


g.png

/*
大模拟,容易出错的地方是判断结果是否超过1e18输出INF
这里不需要用什么快速幂,特判一下如果x = 1结果为1
否则只要x是比2大的数,2的60次方超过1e18,因此遍历不会超过60次
直接暴力判断即可,需要注意暴力乘的时候可能爆longlong,直接用__int128就好了

*/
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
#define int long long
string big[11][10], sma[11][10];
string dengyu[10], inf[40];
char g[15][2010];
int col = 0;
void init()
{
    big[0][0]="........",sma[0][0]="......";
    big[0][1]="........",sma[0][1]=".00000";
    big[0][2]=".0000000",sma[0][2]=".0...0";
    big[0][3]=".0.....0",sma[0][3]=".0...0";
    big[0][4]=".0.....0",sma[0][4]=".0...0";
    big[0][5]=".0.....0",sma[0][5]=".00000";
    big[0][6]=".0.....0",sma[0][6]="......";
    big[0][7]=".0.....0",sma[0][7]="......";
    big[0][8]=".0000000",sma[0][8]="......";
    big[0][9]="........",sma[0][9]="......";

    big[1][0]="........",sma[1][0]="......";
    big[1][1]="........",sma[1][1]=".....1";
    big[1][2]=".......1",sma[1][2]=".....1";
    big[1][3]=".......1",sma[1][3]=".....1";
    big[1][4]=".......1",sma[1][4]=".....1";
    big[1][5]=".......1",sma[1][5]=".....1";
    big[1][6]=".......1",sma[1][6]="......";
    big[1][7]=".......1",sma[1][7]="......";
    big[1][8]=".......1",sma[1][8]="......";
    big[1][9]="........",sma[1][9]="......";

    big[2][0]="........",sma[2][0]="......";
    big[2][1]="........",sma[2][1]=".22222";
    big[2][2]=".2222222",sma[2][2]=".....2";
    big[2][3]=".......2",sma[2][3]=".22222";
    big[2][4]=".......2",sma[2][4]=".2....";
    big[2][5]=".2222222",sma[2][5]=".22222";
    big[2][6]=".2......",sma[2][6]="......";
    big[2][7]=".2......",sma[2][7]="......";
    big[2][8]=".2222222",sma[2][8]="......";
    big[2][9]="........",sma[2][9]="......";

    big[3][0]="........",sma[3][0]="......";
    big[3][1]="........",sma[3][1]=".33333";
    big[3][2]=".3333333",sma[3][2]=".....3";
    big[3][3]=".......3",sma[3][3]=".33333";
    big[3][4]=".......3",sma[3][4]=".....3";
    big[3][5]=".3333333",sma[3][5]=".33333";
    big[3][6]=".......3",sma[3][6]="......";
    big[3][7]=".......3",sma[3][7]="......";
    big[3][8]=".3333333",sma[3][8]="......";
    big[3][9]="........",sma[3][9]="......";

    big[4][0]="........",sma[4][0]="......";
    big[4][1]="........",sma[4][1]=".4...4";
    big[4][2]=".4.....4",sma[4][2]=".4...4";
    big[4][3]=".4.....4",sma[4][3]=".44444";
    big[4][4]=".4.....4",sma[4][4]=".....4";
    big[4][5]=".4444444",sma[4][5]=".....4";
    big[4][6]=".......4",sma[4][6]="......";
    big[4][7]=".......4",sma[4][7]="......";
    big[4][8]=".......4",sma[4][8]="......";
    big[4][9]="........",sma[4][9]="......";

    big[5][0]="........",sma[5][0]="......";
    big[5][1]="........",sma[5][1]=".55555";
    big[5][2]=".5555555",sma[5][2]=".5....";
    big[5][3]=".5......",sma[5][3]=".55555";
    big[5][4]=".5......",sma[5][4]=".....5";
    big[5][5]=".5555555",sma[5][5]=".55555";
    big[5][6]=".......5",sma[5][6]="......";
    big[5][7]=".......5",sma[5][7]="......";
    big[5][8]=".5555555",sma[5][8]="......";
    big[5][9]="........",sma[5][9]="......";

    big[6][0]="........",sma[6][0]="......";
    big[6][1]="........",sma[6][1]=".66666";
    big[6][2]=".6666666",sma[6][2]=".6....";
    big[6][3]=".6......",sma[6][3]=".66666";
    big[6][4]=".6......",sma[6][4]=".6...6";
    big[6][5]=".6666666",sma[6][5]=".66666";
    big[6][6]=".6.....6",sma[6][6]="......";
    big[6][7]=".6.....6",sma[6][7]="......";
    big[6][8]=".6666666",sma[6][8]="......";
    big[6][9]="........",sma[6][9]="......";

    big[7][0]="........",sma[7][0]="......";
    big[7][1]="........",sma[7][1]=".77777";
    big[7][2]=".7777777",sma[7][2]=".....7";
    big[7][3]=".......7",sma[7][3]=".....7";
    big[7][4]=".......7",sma[7][4]=".....7";
    big[7][5]=".......7",sma[7][5]=".....7";
    big[7][6]=".......7",sma[7][6]="......";
    big[7][7]=".......7",sma[7][7]="......";
    big[7][8]=".......7",sma[7][8]="......";
    big[7][9]="........",sma[7][9]="......";


    big[8][0]="........",sma[8][0]="......";
    big[8][1]="........",sma[8][1]=".88888";
    big[8][2]=".8888888",sma[8][2]=".8...8";
    big[8][3]=".8.....8",sma[8][3]=".88888";
    big[8][4]=".8.....8",sma[8][4]=".8...8";
    big[8][5]=".8888888",sma[8][5]=".88888";
    big[8][6]=".8.....8",sma[8][6]="......";
    big[8][7]=".8.....8",sma[8][7]="......";
    big[8][8]=".8888888",sma[8][8]="......";
    big[8][9]="........",sma[8][9]="......";

    big[9][0]="........",sma[9][0]="......";
    big[9][1]="........",sma[9][1]=".99999";
    big[9][2]=".9999999",sma[9][2]=".9...9";
    big[9][3]=".9.....9",sma[9][3]=".99999";
    big[9][4]=".9.....9",sma[9][4]=".....9";
    big[9][5]=".9999999",sma[9][5]=".99999";
    big[9][6]=".......9",sma[9][6]="......";
    big[9][7]=".......9",sma[9][7]="......";
    big[9][8]=".9999999",sma[9][8]="......";
    big[9][9]="........",sma[9][9]="......";

    dengyu[0]="........";
    dengyu[1]="........";
    dengyu[2]="........";
    dengyu[3]="........";
    dengyu[4]=".=======";
    dengyu[5]="........";
    dengyu[6]=".=======";
    dengyu[7]="........";
    dengyu[8]="........";
    dengyu[9]="........";

    inf[0]="........................";
    inf[1]="........................";
    inf[2]=".IIIIIII.N.....N.FFFFFFF";
    inf[3]="....I....NN....N.F......";
    inf[4]="....I....N.N...N.F......";
    inf[5]="....I....N..N..N.FFFFFFF";
    inf[6]="....I....N...N.N.F......";
    inf[7]="....I....N....NN.F......";
    inf[8]=".IIIIIII.N.....N.F......";
    inf[9]="........................";

}

// 判断是否超过1e18 
int check(int x, int y)
{
    if(x == 1) return 1;

    __int128 res = 1;
    for(int i = 1; i <= y; i ++)
    {
        res *= x;
        if(res > 1e18) return 0;
    }
    return res;
}

// 把数字提取到vector数组中 
void tiqu(int x, vector<int>& vec)
{
    while(x)
    {
        vec.push_back(x % 10);
        x /= 10;
    }
    reverse(vec.begin(),vec.end());
}

// 添加大数 
void add_big(vector<int>& vec)
{
    for(auto x : vec)
    {
        for(int i = 0; i < 10; i ++)
            for(int j = 0; j < 8;j ++)
                g[i][col + j] = big[x][i][j]; 
        col += 8;
    }
}

// 添加小数 
void add_small(vector<int>& vec)
{
    for(auto x : vec)
    {
        for(int i = 0; i < 10; i ++)
            for(int j = 0; j < 6;j ++)
                g[i][col + j] = sma[x][i][j]; 
        col += 6;
    }
}

// 添加等于号 
void add_dengyu()
{
    for(int i = 0; i < 10; i ++)
        for(int j = 0; j < 8;j ++)
        g[i][col + j] = dengyu[i][j]; 
    col += 8;
}

// 添加INF 
void add_inf()
{
    for(int i = 0; i < 10; i ++)
        for(int j = 0; j < 24;j ++)
        g[i][col + j] = inf[i][j]; 
    col += 24;  
}

// 最后一列"." 
void add_col()
{
    for(int i = 0; i < 10; i ++)
        g[i][col] = '.'; 
    col += 1;   
}

// 打印结果 
void print()
{
    for(int i = 0; i < 10; i ++)
    {
        for(int j = 0; j < col; j ++)
            cout << g[i][j];
        cout << endl;
    }
}

void solve()
{
    col = 0;
    int x, y;
    scanf("%lld^{%lld}", &x, &y);

    vector<int> vecx;
    tiqu(x, vecx);
    add_big(vecx);

    vector<int> vecy;
    tiqu(y, vecy);
    add_small(vecy);

    add_dengyu();

    int res = check(x, y);
    if(res == 0){
        add_inf();      
    }
    else{
        vector<int> vecres;
        tiqu(res, vecres);
        add_big(vecres);
    }
    add_col();
    print();
}

signed main() 
{
    init();
    int T; cin >> T;
    while(T --) solve();
}

h.png

99.png

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
void solve()
{
    int n, k; cin >> n >> k;
    if(n * 2 < k) cout << "0 " << n * 2 << '\n';
    else cout << n - (k - 1) / 2 << ' ' << n + k / 2 << '\n';
}

signed main() 
{
    int T; cin >> T;
    while(T --) solve();
}


kkk.png
232.png

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;

void solve() {
    int n; cin >> n;

    if (n <= 4) cout << -1 << "\n";
    else if (n == 5) cout << "4 1 3 5 2\n";
    else if (n == 6) cout << "1 3 5 2 4 6\n";
    else if (n == 7) cout << "1 3 5 7 2 4 6\n";
    else if (n == 8) cout << "1 3 5 7 2 4 6 8\n";
    else if (n == 9) cout << "1 3 5 7 9 2 4 6 8\n";
    else if (n == 10) cout << "1 3 10 5 7 9 2 4 6 8\n";
    else if (n == 11) cout << "1 3 10 5 2 7 9 11 8 6 4\n";
    else
    {
        vector<int> vec;
        if(n & 1) {
            for(int i = 1; i <= n; i += 2)
            {   
                vec.push_back(i);
                if(i == 5) vec.push_back(2);
                if(i == n - 6) vec.push_back(n - 1);
            }   
            for(int i = n - 3; i >= 4; i -= 2)
                vec.push_back(i);
        }
        else {
            for(int i = 1; i <= n - 3; i += 2)
            {
                vec.push_back(i);
                if(i == 5) vec.push_back(2);
            }
            for(int i = n; i >= 4; i -= 2)
            {
                vec.push_back(i);
                if(i == n - 4) vec.push_back(n - 1);
            }
        }
        for(auto x : vec) cout << x << " ";
        cout << '\n';
    }

}
signed main() 
{
    int T; T = 1;
    while(T --) solve(); 
}




活动打卡代码 AcWing 1024. 装箱问题

#include <iostream>
#include <algorithm>

using namespace std;

const int M = 20010;

int n, m;
int f[M];

int main()
{
    cin >> m >> n;
    for (int i = 0; i < n; i ++ )
    {
        int v;
        cin >> v;
        for (int j = m; j >= v; j -- )    //容积
            f[j] = max(f[j], f[j - v] + v);
    }

    cout << m - f[m] << endl;

    return 0;
}




活动打卡代码 AcWing 423. 采药

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
int n, m;
int f[N];
int main()     //  01背包
{
    cin >> m >> n;
    for (int i = 1; i <= n; i ++ )     //物品
    {
        int v, w;
        cin >> v >> w;
        for (int j = m; j >= v; j -- )    //背包容积
            f[j] = max(f[j], f[j - v] + w);
    }
    cout << f[m] << endl;
    return 0;
}