Logo 陈明玮的博客

博客

打卡题真水2

2024-08-28 20:31:49 By 陈明玮

论今日打卡题数据之水

2024-08-28 20:17:45 By 陈明玮

论今日打卡题

#894

test2—9的输出全是1000000000.00!!!

随便一个

#include <iostream>
using namespace std;

int main(){
    cout<<"1000000000.00";
    return 0;
}

提交记录

就90分了!!,真就无语了

强烈希望更改数据!!!!!

12754 Mathler 题解

2024-06-01 13:16:57 By 陈明玮

直接上代码!!!

#include <iostream>
using namespace std;
string ans[100005];
char lock[6];
long long cnt;

string from_int_to_string(long long x) {
    string a="";
    if(x==0) {
        return "0";
    }
    while(x) {
        a=(char)('0'+(x%10))+a;
        x/=10;
    }
    return a;
}
int main() {
    ios::sync_with_stdio(false);
    long long n;
    cin>>n;
    for(long long i=100000; i<=999999; i++) {
        if(i==n) {
            cnt++;
            ans[cnt]=from_int_to_string(n);
        }
    }
    for(long long i=0; i<10000; i++) {
        long long maxj=0;
        string is=from_int_to_string(i);
        if(is.size()==4) maxj=9;
        if(is.size()==3) maxj=99;
        if(is.size()==2) maxj=999;
        if(is.size()==1) maxj=9999;
        for(long long j=0; j<maxj; j++) {
            string js=from_int_to_string(j);
            if(is.size()+js.size()!=5) {
                continue;
            }
            if(i+j==n) {
                cnt++;
                ans[cnt]=is+"+"+js;
            }
            if(i-j==n) {
                cnt++;
                ans[cnt]=is+"-"+js;
            }
            if(i*j==n) {
                cnt++;
                ans[cnt]=is+"*"+js;
            }
            if(j!=0) {
                if(i%j==0) {
                    if(i/j==n) {
                        cnt++;
                        ans[cnt]=is+"/"+js;
                    }
                }
            }
        }
    }
    for(long long i=0; i<100; i++) {
        string is=from_int_to_string(i);
        long long maxj;
        if(is.size()==2) maxj=10;
        else maxj=100;
        for(long long j=0; j<maxj; j++) {
            string js=from_int_to_string(j);
            long long maxk;
            if(is.size()==2||js.size()==2) maxk=10;
            else maxk=100;
            for(long long k=0; k<100; k++) {
                string ks=from_int_to_string(k);
                if(is.size()+js.size()+ks.size()!=4) continue;
                if(i+j+k==n) {
                    cnt++;
                    ans[cnt]=is+"+"+js+"+"+ks;
                }
                if(i+j-k==n) {
                    cnt++;
                    ans[cnt]=is+"+"+js+"-"+ks;
                }
                if(i+j*k==n) {
                    cnt++;
                    ans[cnt]=is+"+"+js+"*"+ks;
                }
                if(k!=0) if(j%k==0)
                        if(i+j/k==n) {
                            cnt++;
                            ans[cnt]=is+"+"+js+"/"+ks;
                        }
                if(i-j+k==n) {
                    cnt++;
                    ans[cnt]=is+"-"+js+"+"+ks;
                }
                if(i-j-k==n) {
                    cnt++;
                    ans[cnt]=is+"-"+js+"-"+ks;
                }
                if(i-j*k==n) {
                    cnt++;
                    ans[cnt]=is+"-"+js+"*"+ks;
                }
                if(k!=0) if(j%k==0)
                        if(i-j/k==n) {
                            cnt++;
                            ans[cnt]=is+"-"+js+"/"+ks;
                        }
                if(i*j+k==n) {
                    cnt++;
                    ans[cnt]=is+"*"+js+"+"+ks;
                }
                if(i*j-k==n) {
                    cnt++;
                    ans[cnt]=is+"*"+js+"-"+ks;
                }
                if(i*j*k==n) {
                    cnt++;
                    ans[cnt]=is+"*"+js+"*"+ks;
                }
                if(k!=0) if((i*j)%k==0)
                        if(i*j/k==n) {
                            cnt++;
                            ans[cnt]=is+"*"+js+"/"+ks;
                        }
                if(j!=0) {
                    if(i%j==0)
                        if(i/j+k==n) {
                            cnt++;
                            ans[cnt]=is+"/"+js+"+"+ks;
                        }
                    if(i%j==0)
                        if(i/j-k==n) {
                            cnt++;
                            ans[cnt]=is+"/"+js+"-"+ks;
                        }
                    if((i*k)%j==0)
                        if(i*k/j==n) {
                            cnt++;
                            ans[cnt]=is+"/"+js+"*"+ks;
                        }
                    if(k!=0)
                        if(i%(j*k)==0)
                            if(i/j/k==n) {
                                cnt++;
                                ans[cnt]=is+"/"+js+"/"+ks;
                            }
                }
            }
        }
    }
    bool used[128];
    bool mst[128];
    for(long long i=0; i<127; i++) used[i]=mst[i]=0;
    for(long long i=1; i<=cnt; i++) {
        long long ok=1;
        bool tmp[128];
        for(long long j='0'; j<='9'; j++) tmp[j]=0;
        tmp['+']=tmp['-']=tmp['*']=tmp['/'];
        for(long long j=0; j<ans[i].size(); j++) {
            if(used[ans[i][j]]) {
                ok=0;
            }
            if(lock[j]) {
                if(ans[i][j]!=lock[j]) {
                    ok=0;
                }
            }
            tmp[ans[i][j]]=1;
        }
        for(long long j='0'; j<='9'; j++) if(mst[j]&&(!tmp[j])) ok=0;
        if(mst['+']&&(!tmp['+'])) ok=0;
        if(mst['-']&&(!tmp['-'])) ok=0;
        if(mst['*']&&(!tmp['*'])) ok=0;
        if(mst['/']&&(!tmp['/'])) ok=0;
        if(ok) {
            cout<<ans[i]<<endl;
            string t;
            cin>>t;
            for(long long j=0; j<ans[i].size(); j++) {
                if(t[j]=='X') {
                    used[ans[i][j]]=1;
                }
            }
            for(long long j=0; j<ans[i].size(); j++) {
                if(t[j]=='A'||t[j]=='B') {
                    used[ans[i][j]]=0;
                    mst[ans[i][j]]=1;
                }
                if(t[j]=='A') {
                    lock[j]=ans[i][j];
                }
            }
            if(t=="AAAAAA") {
                return 0;
            }
        }
    }
    return 0;
}

别数了,200行

今天上课时突发奇想,花了我一个小时才写出来

省赛冲刺班模拟考试 题解

2024-05-31 21:48:39 By 陈明玮

A.取石子

将数据特判一下,递归求解。

#include<iostream>
using namespace std;
int a,b;
bool f;
void s() {
    f=!f;
    if(a==b||a/b>=2||b/a>=2) {
        return;
    }
    a>b?a-=b:b-=a;
    s();
}
int main() {
    while(cin>>a>>b) {
        if(a==0&&b==0) {
            break;
        }
        if(a==0||b==0) {
            cout<<"win"<<endl;
            continue;
        }
        f=false;
        s();
        if(f) {
            cout<<"win"<<endl;
        } else {
            cout<<"lose"<<endl;
        }
    }
    return 0;
}

B.骑行

套用数学公式,并且出发时间为负数的不管他,反正追不上。找最快的。

#include <iostream>
using namespace std;
int n,ans,v,t;
int main() {
    while(cin>>n) {
        if(n==0) {
            break;
        }
        ans=0xfffffff;
        for(int i=1 ; i<=n; i++) {
            cin>>v>>t;
            if(t<0) {
                continue;
            }
            int f=(16200.0/(double)v)+t+0.99;
            ans=min(f,ans);
        }
        cout<<ans<<endl;
    }
    return 0;
}

C.拯救行动

经典的宽搜,加一个杀掉守卫的if就行了。

#include <iostream>
#include <cstring>
using namespace std;
int n,m,ax,ay,bx,by,f,minn,v[210][210],q[40100][3],dx[4]= {-1,1,0,0},dy[4]= {0,0,-1,1},t;
char map[210][210];
void bfs(int x,int y,int l) {
    int head=0,tail=1;
    q[tail][0]=x;
    q[tail][1]=y;
    q[tail][2]=l;
    v[x][y]=1;
    while(head!=tail) {
        head++;
        x=q[head][0];
        y=q[head][1];
        l=q[head][2];
        v[x][y]=1;
        if(x==bx&&y==by) {
            minn=l;
            break;
        }
        if(map[x][y]=='x') {
            tail++;
            map[x][y]='@';
            q[tail][0]=x;
            q[tail][1]=y;
            q[tail][2]=l+1;
        } else {
            for(int i=0; i<4; i++) {
                int nx=x+dx[i];
                int ny=y+dy[i];
                if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&map[nx][ny]!='#'&&v[nx][ny]==0) {
                    tail++;
                    q[tail][0]=nx;
                    q[tail][1]=ny;
                    q[tail][2]=l+1;
                    v[nx][ny]=1;
                }
            }
        }
    }
}
int main() {
    cin>>t;
    while(t--) {
        minn=0;
        memset(map,'#',sizeof(map));
        memset(v,0,sizeof(v));
        cin>>n>>m;
        for(int i=1; i<=n; i++) {
            for(int j=1; j<=m; j++) {
                cin>>map[i][j];
                if(map[i][j]=='r') {
                    ax=i;
                    ay=j;
                }
                if(map[i][j]=='a') {
                    bx=i;
                    by=j;
                }
            }
        }
        bfs(ax,ay,0);
        if(minn) {
            cout<<minn<<endl;
        } else {
            cout<<"Impossible"<<endl;
        }
    }
    return 0;
}

D.阶梯电价

直接枚举u、v之间的数,几个if判断就行了。

#include <iostream>
using namespace std;
int u,v;
double ans;
int main() {
    cin>>u>>v;
    for(int i=u+1; i<=v; i++) {
        if(i<=2760) {
            ans+=0.52;
        } else if(i>2760&&i<=4800) {
            ans+=0.57;
        } else if(i>4800) {
            ans+=0.82;
        }
    } 
    printf("%.2f",ans);
    return 0;
}

这是本蒟蒻第一次写题解,望大家支持!如果大佬们有宝贵意见,请在评论区留言。

陈明玮 Avatar