10.9E 根据公式推导,能得到只判断 x*log(y)和y*log(x)得到答案,但是这题对精度要求很高,如果x==y的时候直接返回=即可代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
int main()
{
    LL x,y;
    cin>>x>>y;
    if(x==y)
    {
        cout<<"="<<endl;
        return 0;
     } 
    double num1=x*log(y);
    double num2=y*log(x);
    if(num1>num2)cout<<"<"<<endl;
    if(num1<num2)cout<<">"<<endl;
    //cout<<num1<<" "<<num2<<endl;
    if(num1==num2)cout<<"="<<endl;
}
View Code

F题,让找出最小的花费,先遍历一遍,判断是否有符合这个条件的,如果符合在找第三个是否符合,如果也符合就比较最小值,最后输出最小值就可以:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
struct mp
{
    int num;
    int cost;
}o[5005];
LL ans[5005];
int main()
{
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        cin>>o[i].num ;
    }
    for(int i=0;i<t;i++)
    {
        cin>>o[i].cost ;
        ans[i]=1e18;
    }
    for(int i=1;i<t;i++)
    {
        int num1=1e9+7;
        int flag=0;
        for(int j=0;j<i;j++)
        {    
            if(o[j].num<o[i].num &&o[j].cost<num1)
            {
                flag=1;
                num1=o[j].cost ;
            }
        }
        if(flag==0)continue;
        int num2=1e9+7;
        for(int j=i+1;j<t;j++)
        {
            if(o[i].num<o[j].num &&o[j].cost <num2 )
            {
                flag=2;
                num2=o[j].cost ;
            }
        }
        if(flag==2)ans[i]=num1+num2+o[i].cost ;
    }
    LL res=1e18;
    for(int i=0;i<t;i++)
    {
        if(ans[i]<res)res=ans[i];
    }
    if(res==1e18)cout<<-1<<endl;
    else cout<<res<<endl;
}
View Code

7-10 这题当时没真正了解题意就开始做了,说的是绝对值相同就删除,而且后面输出删除的当时也没看懂,不过想明白还是可以的:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
struct mp
{
    int aa;
    int num;
    int next;
}edge[100050];
int vis[100050];
vector<mp>p;
int main()
{
    int frist,n;
    cin>>frist>>n;
    for(int i=0;i<n;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        edge[a].aa =a;
        edge[a].num =b;
        edge[a].next =c;
    }
    mp o;
    for(int i=frist;i!=-1;i=edge[i].next )
    {
        //cout<<p.size()<<" "<<i<<endl;
        if(vis[abs(edge[i].num )]==1)
        {
            if(p.size()!=0)p[p.size()-1].next=edge[i].aa ;
            o.aa=edge[i].aa ;
            o.num=edge[i].num ;
            p.push_back(o);
            continue;
        }
        vis[abs(edge[i].num )]=1;
        if(i!=frist)
        printf("%05d\n",edge[i].aa );
        printf("%05d %d ",edge[i].aa ,edge[i].num );
    }
    cout<<-1<<endl;
    if(p.size()!=0)
    {
        for(int i=0;i<p.size();i++)
        {
            printf("%05d %d ",p[i].aa ,p[i].num );
            if(i!=p.size()-1)printf("%05d\n",p[i].next );
            else cout<<-1<<endl;
        }
    }
}
View Code

7-11 ...无语,一个并查集,但是因为find函数的原因超时了,改完find就对了 代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
int s[20050];
int find(int x)
{
    return s[x]==x?x:s[x]=find(s[x]);
}
void uni(int a,int b)
{
    int v=find(a);
    int r=find(b);
    if(v!=r)
    {
        s[v]=r;
    }
}
int main()
{
    int t;
    cin>>t;
    int max=0;
    for(int i=0;i<=10010;i++)s[i]=i;
    int num=0; 
    for(int k=0;k<t;k++)
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            int v;
            scanf("%d",&v);
            if(v>max)max=v; 
            if(i!=0) 
            {
                uni(num,v);
            }
            else
            num=v;
        }
    }
    int res=0;
    for(int i=1;i<=max;i++)
    {
        if(s[i]==i)res++;
    }
    cout<<max<<" "<<res<<endl;
    int g;
    cin>>g;
    while(g--)
    {
        int x,y;
        cin>>x>>y;
        if(find(x)==find(y))
        {
            cout<<"Y"<<endl;
        }
        else cout<<"N"<<endl;
    }
}
View Code

7-1 当时判断独立字符串的时候出了点问题,还是对字符串有点生疏,这个题可以用价值一个亿的代码做,也可以直接写 代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    string str;
    vector<string> v;
    cin>>n;
    getchar();
    while(n--){
        getline(cin,str);
        cout<<str<<endl<<"AI: ";
        for(int i=0;i<str.size();i++){
            if(str[i]>='A'&&str[i]<='Z'){ 
                if(str[i]!='I'){
                    str[i]=str[i]-'A'+'a'; 
                }
            }else if((str[i]>='0'&&str[i]<='9')||(str[i]>='a'&&str[i]<='z')){ 
                continue;
            }else if(str[i]!=' '){
                 str.insert(i," ");
                 i++;
            }
            if(str[i] =='?'){
                str[i]='!';
            }
        }
        string temp="";
        for(int i=0;i<str.size();i++){
            if(str[i]!=' '){
                temp+=str[i];
            }else{
                if(temp!=""){
                    v.push_back(temp);
                    temp="";
                }
            }
        }
        if(temp!=""){
            v.push_back(temp);
        }
        for(int i=0;i<v.size();i++){
            if(v[i]=="I"||v[i]=="me"){
                v[i]="you";
            }else if(v[i]=="can"||v[i]=="could"){
                if((i+1)<v.size()){
                    if(v[i+1]=="you"){
                        v[i+1] = v[i];
                        v[i]="I"; 
                    }
                }
            }
        }
        for(int i=0;i<v.size();i++){
            cout<<v[i];
            if(i==v.size()-1){
                break;
            }
            if((v[i+1][0]>='0'&&v[i+1][0]<='9')||(v[i+1][0]>='a'&&v[i+1][0]<='z')||(v[i+1][0]=='I')){
                printf(" ");        
            }
        }
        printf("\n");
        v.clear();
    }
    return 0;
}
View Code

7-3 emm..改了好多遍都不知道哪错了,看了ac代码后也没感觉有什么差别,难道写个函数就不对了?不清楚,我的代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
struct mp
{
    LL up;
    LL done;
}o;
vector<mp>p;
vector<mp>q;
LL gcd(LL a,LL b)
{
    if(b==0)return a;
    else return gcd(b,a%b);
 }
LL lcm(LL a,LL b)
 {
     return a/gcd(a,b)*b;
 }
int main()
{
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        LL a,b;
        scanf("%lld/%lld",&a,&b);
        //cout<<a<<" "<<b<<endl;
        if(a==0||b==0)continue;
        o.up=a;
            o.done=b;
        if(a>0)
        {
            p.push_back(o);
        }
        else q.push_back(o);
    }
    LL sum=1;
    LL res=0;
    for(int i=0;i<p.size();i++)
    {
        sum=lcm(sum,p[i].done);
    //    cout<<p[i].done<<endl;
    }
    for(int i=0;i<q.size();i++)
    {
    //    cout<<q[i].done<<" "<<q[i].up<<endl;
        sum=lcm(sum,q[i].done);
    }
    for(int i=0;i<p.size();i++)
    {
        res+=p[i].up*sum/p[i].done;
    }
    for(int i=0;i<q.size();i++)
    {
        res+=q[i].up*sum/q[i].done;
    }
    if(res==0)cout<<0<<endl;
    else if(res%sum==0)cout<<res/sum<<endl;
    else
    {
        LL num1=gcd(res,sum);
        res=res/num1;
        sum=sum/num1;
        if(sum<0)res=-res,sum=-sum;
        LL v=res/sum;
        if(v!=0)cout<<v<<" ";
        res=res%sum;
        cout<<res<<"/"<<sum<<endl;
    }

}
View Code

AC代码:

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;

//求最大公约数函数
long long gcd(long long a,long long b)
{
    if(a==0)
    {
        return 0;
    }
    else
    {
        return (b==0) ? a: gcd(b,a%b);
        //固定格式要记住
    }
}
int main()
{
    int n;
    long long a,b,c,d;
    char d1,d2;
    cin>>n;
    cin>>a>>d1>>b;
    int t=gcd(a,b);
    //约分
    if(a)
    {
        a=a/t;
        b=b/t;
    }
    //依次输入相加
    for(int i=1;i<n;i++)
    {
        cin>>c>>d2>>d;
        //通分
        long long b1=b/gcd(b,d)*d;
        a=a*b1/b+c*b1/d;
        b=b1;
        int t2=gcd(a,b);
        if(t2!=0)
        {
            a=a/t2;
            b=b/t2;
        }
        //cout<<a<<"/"<<b<<endl;
    }
    //cout<<a<<"/"<<b<<endl;
    if(a&&a/b==0)
    {
        cout<<a%b<<"/"<<b<<endl;
    }
    else if(a%b==0)
    {
        cout<<a/b<<endl;
    }
    else
    {
        cout<<a/b<<" "<<a%b<<"/"<<b<<endl;
    }
}
View Code

 

posted on 2020-10-17 20:05  小灰灰的父亲  阅读(82)  评论(0)    收藏  举报