很想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;
}
标签:25,ch,min,19,emo,int,while,include,mod
From: https://www.cnblogs.com/cdag/p/18595993