2025寒假天梯训练7

7-8 古风排版 - 2025寒假天梯赛训练7(22 23届)

思路:pta风格模拟题。

#include 
using namespace std;
#define int long long
#define endl "\n"
#define sz(x) (int)x.size()
#define e emplace_back

//void solve(){
//    cout<<"Hello World"<>a>>b;
//    cout<>a>>b;
//    if(b==0) cout<>str;
//        if(str==".") break;
//        cnt++;
//        if(cnt==2) A=str;
//        if(cnt==14) B=str;
//    }
//    if(cnt>=14) cout<=2) cout<>n;
//    map mp;
//    for(int i=1;i<=n;i++){
//        int k; cin>>k;
//        for(int j=1;j<=k;j++){
//            int x; cin>>x;
//            mp[x]++;
//        }
//    }
//    int num=0,cnt=0;
//    for(auto [x,y]:mp){
//        if(y>cnt) cnt=y,num=x;
//        if(y==cnt) num=max(num,x);
//    }
//    cout<>n;      // 是每一列的字符数,即行数为n
    string str;
    cin.ignore();
    getline(cin,str);
//    cout<>t;
    while(t--){
        solve();
    }
    return 0;
}

7-12 功夫传人 - 2025寒假天梯赛训练7(22 23届)

思路:把树dfs一次即可。

#include 
using namespace std;
#define int long long
#define endl "\n"
#define sz(x) (int)x.size()
#define e emplace_back

//void solve(){
//    cout<<"Hello World"<>a>>b;
//    cout<>a>>b;
//    if(b==0) cout<>str;
//        if(str==".") break;
//        cnt++;
//        if(cnt==2) A=str;
//        if(cnt==14) B=str;
//    }
//    if(cnt>=14) cout<=2) cout<>n;
//    map mp;
//    for(int i=1;i<=n;i++){
//        int k; cin>>k;
//        for(int j=1;j<=k;j++){
//            int x; cin>>x;
//            mp[x]++;
//        }
//    }
//    int num=0,cnt=0;
//    for(auto [x,y]:mp){
//        if(y>cnt) cnt=y,num=x;
//        if(y==cnt) num=max(num,x);
//    }
//    cout<>n;        // 是每一列的字符数,即行数为n
//    string str;
//    cin.ignore();
//    getline(cin,str);
    cout<>n;
//    int arr[100005];
//    for(int i=1;i<=n;i++) cin>>arr[i];
//    sort(arr+1,arr+n+1);
//    if(n%2==0){
//        cout<<"Outgoing #: "< vct[100005];
map good;
void dfs(int u,double power){
    if(good[u]!=0){
        ans+=good[u]*power;
        return;
    }
    for(auto v:vct[u]) dfs(v,power*(100-r)/100);
}
void solve(){
    cin>>n>>z>>r;
    for(int i=0;i<=n-1;i++){
        int k; cin>>k;
        if(k==0){
            int x; cin>>x;
            good[i]=x;
        }
        else for(int j=1;j<=k;j++){
            int x; cin>>x;
            vct[i].e(x);
        }
    }
    dfs(0,z);
    cout<<(int)ans;       // 只保留整数部分,不四舍五入
}

int32_t main() {
    ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
    int t=1;
//    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

7-13 非常弹的球 - 2025寒假天梯赛训练7(22 23届)

思路:简单的物理题,30分。

#include 
using namespace std;
#define int long long
#define endl "\n"
#define sz(x) (int)x.size()
#define e emplace_back

//void solve(){
//    cout<<"Hello World"<>a>>b;
//    cout<>a>>b;
//    if(b==0) cout<>str;
//        if(str==".") break;
//        cnt++;
//        if(cnt==2) A=str;
//        if(cnt==14) B=str;
//    }
//    if(cnt>=14) cout<=2) cout<>n;
//    map mp;
//    for(int i=1;i<=n;i++){
//        int k; cin>>k;
//        for(int j=1;j<=k;j++){
//            int x; cin>>x;
//            mp[x]++;
//        }
//    }
//    int num=0,cnt=0;
//    for(auto [x,y]:mp){
//        if(y>cnt) cnt=y,num=x;
//        if(y==cnt) num=max(num,x);
//    }
//    cout<>n;        // 是每一列的字符数,即行数为n
//    string str;
//    cin.ignore();
//    getline(cin,str);
    cout<>n;
//    int arr[100005];
//    for(int i=1;i<=n;i++) cin>>arr[i];
//    sort(arr+1,arr+n+1);
//    if(n%2==0){
//        cout<<"Outgoing #: "< vct[100005];
//map good;
//void dfs(int u,double power){
//    if(good[u]!=0){
//        ans+=good[u]*power;
//        return;
//    }
//    for(auto v:vct[u]) dfs(v,power*(100-r)/100);
//}
//void solve(){
//    cin>>n>>z>>r;
//    for(int i=0;i<=n-1;i++){
//        int k; cin>>k;
//        if(k==0){
//            int x; cin>>x;
//            good[i]=x;
//        }
//        else for(int j=1;j<=k;j++){
//            int x; cin>>x;
//            vct[i].e(x);
//        }
//    }
//    dfs(0,z);
//    cout<<(int)ans;       // 只保留整数部分,不四舍五入
//}

int bound=1e5;
const double PI=acos(-1);
void solve(){
    double m,p; cin>>m>>p;
    m/=100;
    double E=1000;
    double v=sqrt(2*E/m);
    double vx=cos(PI/4)*v,vy=cos(PI/4)*v;        // sqrt(2)/2 * v
    double d=0;
    while(bound--){
        double t=2*vy/9.8;
        d+=t*vx;
        E-=E*(p/100);       // 动能损失
        v=sqrt(2*E/m);
        vx=cos(PI/4)*v,vy=cos(PI/4)*v;
    }
    cout<>t;
    while(t--){
        solve();
    }
    return 0;
}

7-15 球队“食物链” - 2025寒假天梯赛训练7(22 23届)

思路:写了一发暴搜,30分的题拿22分,可以了。

#include 
using namespace std;
#define int long long
#define endl "\n"
#define sz(x) (int)x.size()
#define e emplace_back

//void solve(){
//    cout<<"Hello World"<>a>>b;
//    cout<>a>>b;
//    if(b==0) cout<>str;
//        if(str==".") break;
//        cnt++;
//        if(cnt==2) A=str;
//        if(cnt==14) B=str;
//    }
//    if(cnt>=14) cout<=2) cout<>n;
//    map mp;
//    for(int i=1;i<=n;i++){
//        int k; cin>>k;
//        for(int j=1;j<=k;j++){
//            int x; cin>>x;
//            mp[x]++;
//        }
//    }
//    int num=0,cnt=0;
//    for(auto [x,y]:mp){
//        if(y>cnt) cnt=y,num=x;
//        if(y==cnt) num=max(num,x);
//    }
//    cout<>n;        // 是每一列的字符数,即行数为n
//    string str;
//    cin.ignore();
//    getline(cin,str);
    cout<>n;
//    int arr[100005];
//    for(int i=1;i<=n;i++) cin>>arr[i];
//    sort(arr+1,arr+n+1);
//    if(n%2==0){
//        cout<<"Outgoing #: "< vct[100005];
//map good;
//void dfs(int u,double power){
//    if(good[u]!=0){
//        ans+=good[u]*power;
//        return;
//    }
//    for(auto v:vct[u]) dfs(v,power*(100-r)/100);
//}
//void solve(){
//    cin>>n>>z>>r;
//    for(int i=0;i<=n-1;i++){
//        int k; cin>>k;
//        if(k==0){
//            int x; cin>>x;
//            good[i]=x;
//        }
//        else for(int j=1;j<=k;j++){
//            int x; cin>>x;
//            vct[i].e(x);
//        }
//    }
//    dfs(0,z);
//    cout<<(int)ans;       // 只保留整数部分,不四舍五入
//}

//int bound=1e5;
//const double PI=acos(-1);
//void solve(){                   // 简单物理题--非常弹的球--30分   写完这个还剩1小时30分钟,还有一题25分的,两题30分的.
//    double m,p; cin>>m>>p;
//    m/=100;
//    double E=1000;
//    double v=sqrt(2*E/m);
//    double vx=cos(PI/4)*v,vy=cos(PI/4)*v;        // sqrt(2)/2 * v
//    double d=0;
//    while(bound--){
//        double t=2*vy/9.8;
//        d+=t*vx;
//        E-=E*(p/100);       // 动能损失
//        v=sqrt(2*E/m);
//        vx=cos(PI/4)*v,vy=cos(PI/4)*v;
//    }
//    cout< dq;
void dfs(int u){
    for(int v=1;v<=n;v++){
        if(!vis[v]&&(match[u][v]=='W'||match[v][u]=='L')){
            vis[v]=true;
            dq.e(v);
            if(sz(dq)==n&&(match[dq.back()][dq.front()]=='W'||match[dq.front()][dq.back()]=='L')) return;
            dfs(v);
            if(sz(dq)==n&&(match[dq.back()][dq.front()]=='W'||match[dq.front()][dq.back()]=='L')) return;
            dq.pop_back();
            vis[v]=false;
        }
    }
}
void solve(){               // 7-15 球队“食物链”--30分的题,暴搜很好写,能拿22分,TLE8分,也可以了吧..
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>match[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        vis[i]=true;
        dq.e(i);
        dfs(i);
        if(sz(dq)==n&&(match[dq.back()][dq.front()]=='W'||match[dq.front()][dq.back()]=='L')) break;
        dq.pop_back();
        vis[i]=false;
    }
    if(sz(dq)==n){
        int cc=true;
        while(!dq.empty()){
            if(cc) cout<>t;
    while(t--){
        solve();
    }
    return 0;
}

你可能感兴趣的:(c++)