重新振作第19-25天----极度emo

很想die,真的球球六级了。

英语六级

这个才是重中之重,剩下没几天了,真得疯狂学一下吧。但是作业也是真的离谱!

软件设计个人小实验*2

写完两个小实验

汇编实验报告

草草完成了一个实验,然后写一下实验报告。

大数据时代的信息素养作业

查一个火锅杯子

软件设计oj上机作业

有1说1,这个题目是真的水。。。。。。而且和去年,还有前年的题目一模一样。大多人都在cv或者GPT,真的自己写的不多。而且,学校oj平台是真的烂,题目emmm,含糊不清,数据范围巨小。感觉就算是超爆炸复杂度,都能够过。但是emmm,我是更喜欢优化一下的。

操作系统汇报 1.5h

上课汇报了一下,大概课前准备+汇报。

操作系统实验报告 2.5h

这次实验给的代码都是错的,虚拟机时跑不了的,镜像源是得自己找的,版本不一致需要自己解决的。

退役acmer的每日一题*n 1.5h

题目链接: https://atcoder.jp/contests/abc342/tasks/abc342_e
题目分析: 从末尾开始最短路,反着找最短路径。
代码实现:

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
using namespace std;
const int N=2e6+10;
const int MAX=1e6+5;
const int mod=1E9+7;
int n,m,k,w;
void solve(){
    cin>>n>>m;
    vector<int>E[n+1];// 存放从到达i的道路的id
    vector<int>from(m+1,0);
    vector<int>l(m+1,0);
    vector<int>d(m+1,0);
    vector<int>k(m+1,0);
    vector<int>c(m+1,0);
    for(int i=1;i<=m;i++){
        int to;
        cin>>l[i]>>d[i]>>k[i]>>c[i]>>from[i]>>to;
        E[to].push_back(i);
    }
    const int inf=1E19+10;
    // 维护最晚出发时间,对于终点而言,最晚出发的时间是可以无穷晚的
    vector<int>dis(n+1,0);
    priority_queue<pair<int,int>>q;
    q.push({inf,n});
    dis[n]=inf;
    // 对于每一个点而言,只受到最近
    while(q.size()){
        int p=q.top().second;
        int v=q.top().first;
        q.pop();
        if(v!=dis[p])continue; 
        for(int i=0;i<E[p].size();i++){
            int v=E[p][i];
            // 不会超过第一班
            if(dis[p]-l[v]-c[v]>=0){
                // 能存放几个
                int x=(dis[p]-l[v]-c[v]) / d[v];
                int now=l[v]+min(k[v]-1,x)*d[v];
                // 求的是最晚时间
                if(dis[from[v]]<now){
                    q.push({now,from[v]});
                    dis[from[v]]=now;
                }
            }
        }
    }
    for(int i=1;i<=n-1;i++){
        if(dis[i]!=0){
            cout<<dis[i]<<endl;
        }
        else {
            cout<<"Unreachable"<<endl;
        }
    }

}
signed main(){
    ios;
    int t;
    t=1;
    //cin>>t;
    while (t--){
        solve();
    }
    return 0;
}

题目链接:https://atcoder.jp/contests/abc370/tasks/abc370_e
题目思路:可以分析得出,每加上一个a[i],ans[i]等于前面所有的ans[j]之和,要保证a[j+1]到a[i]的和不为k。这样我们直接就进行一个递推,通过前缀和来进行相应的维护。
代码实现:

#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <deque>
#include <map>
#include <set>
#include <iomanip>
#include <cmath>
#include <cstring>
#define endl '\n';
#define int long long
const int mod=998244353;
using namespace std;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int ksm(int n,int m,int mod){
    int res=1;
    n=n%mod;
    while(m){
        if(m&1) res=res%mod*n%mod;
    	n=n*n%mod;
    	m>>=1;
    }
    return res%mod;
}
void solve(){
    int n,k;
    cin>>n>>k;
    vector<int>a(n+1,0);
    map<int,int>mp;
    vector<int>dp(n+1,0);
    int x=0;
    mp[0]=1;
    dp[0]=1;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        x=(a[i]+x);
        // 减去不可能的数量
        dp[i]=(dp[0]+mod-mp[x-k])%mod;
        //更新这个位置的已存在的数量
        mp[x]=(dp[i]+mp[x])%mod;
        // 在不知道下一个字符时预处理出来的划分
        dp[0]=(dp[i]+dp[0])%mod;
    }
    cout<<dp[n]<<endl;
}
signed main() {
	int t;
	// cin>>t;
	// while(t--)
	solve();
	return 0;
}

题目链接:https://atcoder.jp/contests/abc375/tasks/abc375_e
题目思路: f[i][j][k]表示当到第i个数字,A组为j,B组为k,C组为前面的数目总和减去i减去j,在这个情况下的最少转移次数,当这个转移的形式出来了之后,转移方程其实也比较好推导了。
代码实现:

#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <deque>
#include <map>
#include <set>
#include <iomanip>
#include <cmath>
#include <cstring>
#define endl '\n';
#define int long long
const int mod=998244353;
using namespace std;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int ksm(int n,int m,int mod){
    int res=1;
    n=n%mod;
    while(m){
        if(m&1) res=res%mod*n%mod;
    	n=n*n%mod;
    	m>>=1;
    }
    return res%mod;
}
void solve(){
    int n,k;
    cin>>n;
    vector<int>a(n+1,0),b(n+1,0);
    int sum=0;
    for(int i=1;i<=n;i++){
        cin>>a[i]>>b[i];
        sum+=b[i];
    }
    if(sum%3!=0){
        cout<<-1<<endl;
        return ;
    }
    sum/=3;
    int f[n+1][sum+1][sum+1];
    memset(f,0,sizeof f);
    for(int i=1;i<=n;i++){
        for(int j=0;j<=sum;j++){
            for(int k=0;k<=sum;k++){
                f[i][j][k]=1E8;
                //if(i==0&&j==k)f[i][j][k]=0;
            }
        }
    }
    int x=0;
    for(int i=1;i<=n;i++){
        x+=b[i];
        for(int j=0;j<=sum;j++){
            for(int k=0;k<=sum;k++){
                if(a[i]==1){
                    // a-c
                    if(x-k-j>=b[i])
                    f[i][j][k]=min(f[i-1][j][k]+1,f[i][j][k]);
                    // a-b
                    if(k>=b[i])
                    f[i][j][k]=min(f[i-1][j][k-b[i]]+1,f[i][j][k]);
                    // a-a
                    if(j>=b[i])
                    f[i][j][k]=min(f[i-1][j-b[i]][k],f[i][j][k]);
                }
                else if(a[i]==2){
                    // b-c
                    if(x-k-j>=b[i])
                    f[i][j][k]=min(f[i-1][j][k]+1,f[i][j][k]);
                    // b-b
                    if(k>=b[i])
                    f[i][j][k]=min(f[i-1][j][k-b[i]],f[i][j][k]);
                    // b-a
                    if(j>=b[i])
                    f[i][j][k]=min(f[i-1][j-b[i]][k]+1,f[i][j][k]);
                }
                else {
                    // c-c
                    if(x-k-j>=b[i])
                    f[i][j][k]=min(f[i-1][j][k],f[i][j][k]);
                    // c-b
                    if(k>=b[i])
                    f[i][j][k]=min(f[i-1][j][k-b[i]]+1,f[i][j][k]);
                    // c-a
                    if(j>=b[i])
                    f[i][j][k]=min(f[i-1][j-b[i]][k]+1,f[i][j][k]);
                }
            }
        }
    }
    if(f[n][sum][sum]!=1E8){
        cout<<f[n][sum][sum]<<endl;
    }   
    else cout<<-1<<endl;

}
signed main() {
	int t;
	// cin>>t;
	// while(t--)
	solve();
	return 0;
}

posted @   菜dog的日常生活  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示