当前位置 博文首页 > NEFU AB-IN's Blog:2020上海高校程序设计竞赛暨第18届上海大学

    NEFU AB-IN's Blog:2020上海高校程序设计竞赛暨第18届上海大学

    作者:[db:作者] 时间:2021-09-21 09:12

    Powered by:AB_IN 局外人

    终于看见清楚姐姐了!!

    A 同源

    m=n/k之后的值,便是三个质数的和。
    其中两个用循环枚举一下(枚举前一百就差不多了,最后一个很大也没关系),另外一个用 m m m减去就行了。
    数据比较多,用scanf不会T。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll t,n,k;
    int main()
    {
        scanf("%d",&t);
        while(t--){
            scanf("%lld%lld",&n,&k);
            if(n%k!=0)  puts("-1 -1 -1");
            else{
                int flag=0;
                ll m=n/k;
                for(ll i=2;i<=102;i++){
                    for(ll j=2;j<=102;j++){
                        ll h=m-i-j;
                        if(h<=1) continue;
                        if(__gcd(i,j)==1&&__gcd(i,h)==1&&__gcd(h,j)==1){
                            printf("%lld %lld %lld\n",k*i,k*j,k*h);
                            flag=1;
                            break;
                        }
                    }
                    if(flag) break;
                }
                if(!flag) puts("-1 -1 -1");
            }
        }
    }
    

    B 分子

    我用 P y t h o n Python Python做的.
    思路就是先把字符串用左括号分开,形成列表。然后按照规则去加原子质量。

    • a n s ans ans是列表中一项的一个分子的原子质量和。
    • t m p tmp tmp是列表中一项的原子质量和。
    • c n t cnt cnt是列表原子质量和。
    • 凡是数字和右括号都省略。

    其中有一步是判断分子后面数字是几的,挺重要。
    代码挺好懂的。

    要是用C++的话,可以用做,将字母转换成数字的话,就是
    数字字符-'0'就可以获得 i n t int int类型的这个数字。

    num=['0','1','2','3','4','5','6','7','8','9']
    s=list(input().split("("))
    cnt=0
    #print(s)
    for i in s:
        ans=0
        tmp=0
        for j in range(len(i)):
            ans=0
            n=''
            c=j+1
            while c<len(i) and i[c] in num:
                n=n+i[c]
                c+=1
            
            if i[j]==")":
                if n=='':
                    continue
                ans+=tmp*(int(n)-1)
            
            if i[j]=="H" and n!='':
                ans+=1*int(n)
            elif i[j]=="H":
                ans+=1
            
            if i[j]=="C" and n!='':
                ans+=13*int(n)
            elif i[j]=="C":
                ans+=13
            
            if i[j]=="O" and n!='':
                ans+=17*int(n)
            elif i[j]=="O":
                ans+=17
                
            tmp+=ans
            cnt+=ans
            
            
    print(cnt)
    
    

    C 爵士

    签到啦!

    t=int(input())
    while t>0:
        t-=1
        n=int(input())
        ans=0
        for i in range(1,n+1):
            s=input()
            if s.count("2")>0:
                ans+=1
        print(f'{(ans/n):.10f}')
    

    F 游戏

    这才是真正的签到题。。。
    原理不太懂,有位大佬写了 ,挂一下,不让就删掉。。。
    反正先手一定赢。

    #include <bits/stdc++.h>
    using namespace std; 
    char a[1000000];
     
    int main() {
        int t;
        cin >> t;
        while(t--) {
            int n;
            cin >> n;
            for (int i = 1; i <= n;i++) {
                int u, v;
                cin >> u >> v;
            }
            cout << "Yes\n";//不用写endl,可以直接写\n
        }
    }
    

    完结。

    cs
    下一篇:没有了