头像

来夕




离线:8小时前


活动打卡代码 AcWing 3238. 工资计算

来夕
9小时前
#include<iostream>

using namespace std;

int sa[]={0,1500,4500,9000,35000,55000,80000,200000};
double sl[]={0,0.03,0.1,0.2,0.25,0.3,0.35,0.45};

int fun(int t){
    if(t<=3500)return t;
    int num=t;
    num-=3500;
    double s=0;
    int idx=1;
    while(num>=sa[idx]){
        s+=(sa[idx]-sa[idx-1])*sl[idx];
        idx++;
    }
    s+=(num-sa[idx-1])*sl[idx];
    t-=s;
    return t;
}

int main(){
    int n;
    cin>>n;
    int l=0,r=200000; 
    while(r>l){
        int mid=l+r>>1;
        if(fun(mid)>=n)r=mid;
        else l=mid+1;
    }
    cout<<l;
    return 0;
}


活动打卡代码 AcWing 3229. 路径解析

来夕
1天前
#include<iostream>
#include<vector>

using namespace std;

int n;
string target;
vector<string>v;

vector<string> get(string s){
    vector<string> res;
    for(int i=0;i<s.size();i++){
        if(s[i]=='/')continue;
        int j=i+1;
        while(j<s.size()&&s[j]!='/')j++;
        string str=s.substr(i,j-i);
        res.push_back(str);
        i=j;
    }
    return res;
}

void fun(vector<string>a,vector<string>cur){
    for(string t:a){
        if(t==".")continue;
        else if(t==".."){if(cur.size())cur.pop_back();}
        else cur.push_back(t);
    }
    for(auto t:cur){
        cout<<'/'<<t;
    }
    if(cur.size()==0)cout<<'/';
    cout<<endl;
}

int main(){
    cin>>n>>target;
    getchar();
    v=get(target);
    while(n--){
        string s;
        getline(cin,s);
        vector<string>cur;
        if(s.size()>0&&s[0]=='/')fun(get(s),cur);
        else fun(get(s),v);
    }
    return 0;
}



来夕
1天前

1.vector有pop_back();//删除最后一个元素
vector根据位置删除元素
删除第i个v.erase(v.begin()+i);
删除一个区间(包括左边,不包括右边)v.erase(v.begin()+a,v.begin()+b);

2.从字符串中截取字串
string s;
int start,len;
s.substr(start,len);
3.堆默认是大根堆,下面是小根堆的写法
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
4.memcpy数组复制
int arr1[10];//假设里面已经有值
int arr2[10];
memcpy(arr2,arr1,sizeof arr2);



活动打卡代码 AcWing 3237. 中间数

来夕
1天前
#include<iostream>

using namespace std;

int n;
const int N=1010;
int arr[N];

int fun(){
    for(int i=0;i<n;i++){
        int a=0,b=0;
        for(int j=0;j<n;j++){
            if(arr[i]>arr[j])a++;
            if(arr[i]<arr[j])b++;
        }
        if(a==b)return arr[i];
    }
    return -1;
}

int main(){
    cin>>n;
    for(int i=0;i<n;i++)cin>>arr[i];
    cout<<fun();
}


活动打卡代码 AcWing 3235. 交通规划

来夕
1天前
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;

int n,m;
const int N=10010;
vector<pair<int,int>>g[N];
int d[N];
bool v[N];
int e[N];
int dijkstra(){
    int res=0;
    memset(d,0x3f,sizeof d);
    d[1]=0;
    for(int i=1;i<=n;i++){
        int t=0;
        for(int j=1;j<=n;j++)
            if(!v[j]&&(t==0||d[j]<d[t]))t=j;
        v[t]=true;
        res+=e[t];
        for(pair<int,int> p:g[t]){
            if(!v[p.first]&&d[p.first]>d[t]+p.second)d[p.first]=d[t]+p.second,e[p.first]=p.second;
            if(!v[p.first]&&d[p.first]==d[t]+p.second)e[p.first]=min(e[p.first],p.second);}
    }
    return res;

}

int main(){
    cin>>n>>m;
    while(m--){
        int a,b,c;
        cin>>a>>b>>c;
        g[a].push_back({b,c});
        g[b].push_back({a,c});
    }
    cout<<dijkstra()<<endl;
    return 0;
}


活动打卡代码 AcWing 3234. 炉石传说

来夕
2天前
#include<iostream>
#include<sstream>
#include<vector>

using namespace std;

const int N = 5010;
string dt[N];
int n;
struct mos { int atk, hp; };

int hp[2] = { 30,30 };
vector<mos>m[2];

void start() {
    stringstream ss;
    int type = 0;//0先手英雄,1后手英雄
    for (int i = 0; i < n; i++) {
        ss.clear();
        ss.str(dt[i]);
        string action;
        ss >> action;
        if (action == "summon") {
            int p, atk, hp;
            ss >> p >> atk >> hp;
            m[type].push_back({ atk,hp });
            if (m[type].size() >= p) {
                int t = m[type].size() - 1;
                while (t != p - 1) {
                    swap(m[type][t], m[type][t - 1]);
                    t--;
                }
            }
        }
        else if (action == "attack") {
            int p1, p2;
            ss >> p1 >> p2;
            if (p2 == 0) {
                hp[type ^ 1] -= m[type][p1 - 1].atk;
                if (hp[type ^ 1] <= 0)return;
            }
            else {
                m[type][p1 - 1].hp -= m[type ^ 1][p2 - 1].atk;
                m[type ^ 1][p2 - 1].hp -= m[type][p1 - 1].atk;
                if (m[type][p1 - 1].hp <= 0)m[type].erase(m[type].begin() + p1 - 1);
                if (m[type ^ 1][p2 - 1].hp <= 0)m[type ^ 1].erase(m[type ^ 1].begin() + p2 - 1);
            }

        }
        else if (action == "end") {
            type = type ^ 1;
        }
    }
}
int main() {
    cin >> n;
    getchar();
    for (int i = 0; i < n; i++) {
        string s;
        getline(cin, s);
        dt[i] = s;
    }
    start();
    if (hp[0] <= 0)cout << -1 << endl;
    else if (hp[1] <= 0)cout << 1 << endl;
    else cout << 0 << endl;
    for (int t = 0; t <= 1; t++) {
        cout << hp[t] << endl;
        cout<< m[t].size()<<' ';
        for (int i = 0; i < m[t].size(); i++) {
            cout << m[t][i].hp << ' ';
        }
        cout << endl;
    }
}



活动打卡代码 AcWing 3233. 火车购票

来夕
2天前
#include<iostream>

using namespace std;

int n;
const int N=110;
int arr[N];
bool tg[N];

//从a开始有连续b个空间
bool lt(int a,int b){
    for(int i=a;i<a+b;i++)if(tg[i])return false;
    int x=a-(a/10)*10;
    int y=(a+b-1)-((a+b-1)/10)*10;
    if(x==0)x=10;
    if(y==0)y=10;
    if(x>5&&y<=5)return false;
    if(x<=5&&y>5)return false;
    return true;
}

int main(){
    cin>>n;
    for(int i=0;i<n;i++)cin>>arr[i];

    for(int i=0;i<n;i++){
        bool flag=false;
        for(int j=1;j<=100;j++){
            if(lt(j,arr[i])){
                flag=true;
                for(int k=0;k<arr[i];k++){tg[j+k]=true; cout<<j+k<<' ';}
                break;
            }
        }
        if(!flag){
            int cnt=arr[i];
            int idx=0;
            while(cnt){
                if(!tg[++idx]){tg[idx]=true,cnt--;cout<<idx<<' ';}
            }
        }
        cout<<endl;
    }

}



活动打卡代码 AcWing 3232. 最大波动

来夕
2天前
#include<iostream>

using namespace std;

int n;
const int N=1010;
int arr[N];
int main(){
    cin>>n;
    for(int i=0;i<n;i++)cin>>arr[i];
    int res=0;
    for(int i=1;i<n;i++)
    if(abs(arr[i]-arr[i-1])>res)res=abs(arr[i]-arr[i-1]);
    cout<<res<<endl;
    return 0;
}



活动打卡代码 AcWing 3230. 游戏

来夕
2天前
//必须加上visit进行判断,不然不通过
#include<iostream>
#include<queue>

using namespace std;

int n,m,t;
const int N=110;
const int T=10010;
const int dx[4]={-1,0,1,0};
const int dy[4]={0,1,0,-1};
struct nd{int r, c, t;};
bool tg[N][N][T],visit[N][N][T];

int bfs(){
    queue<nd>q;
    q.push({1,1,0});
    while(q.size()){
        nd t=q.front();
        q.pop();
        for(int i=0;i<4;i++){
            int x=t.r+dx[i];
            int y=t.c+dy[i];
            if(x<=0||x>n||y<=0||y>m||tg[x][y][t.t+1]||visit[x][y][t.t+1])continue;
            visit[x][y][t.t+1]=true;
            q.push({x,y,t.t+1});
            if(x==n&&y==m)return t.t+1;
        }
    }
    return 0;
}


int main(){
    cin>>n>>m>>t;
    while(t--){
        int r,c,a,b;
        cin>>r>>c>>a>>b;
        for(int i=a;i<=b;i++)
        tg[r][c][i]=true;
    }
    cout<<bfs()<<endl;
    return 0;
}



活动打卡代码 AcWing 3228. 俄罗斯方块

来夕
2天前
#include<iostream>

using namespace std;

const int N=20;
int arr[N][N];
int blk[4][4];

//判段是否冲突
bool judge(int r,int c){
    for(int i=0;i<4;i++)
    for(int j=0;j<4;j++){
        if(blk[i][j]){
            if(arr[i+r][c+j])return true;
        }
    }
    return false;
}

void fun(int r,int c){
    for(int i=0;i<4;i++)
    for(int j=0;j<4;j++)
    if(blk[i][j]){
        arr[i+r][j+c]=1;
    }

    for(int i=0;i<15;i++){
    for(int j=0;j<10;j++)
    cout<<arr[i][j]<<' ';
        cout<<endl;
    }
}


int main(){
    for(int i=0;i<15;i++)
    for(int j=0;j<10;j++)
    cin>>arr[i][j];
    for(int j=0;j<10;j++)
    arr[15][j]=1;
    for(int i=0;i<4;i++)
    for(int j=0;j<4;j++)
    cin>>blk[i][j];
    int t;
    cin>>t;
    t--;
    //i<15被卡
    for(int i=0;i<16;i++){
        if(judge(i,t)){
            fun(i-1,t);
            return 0;
        }
    }
    return 0;
}