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
}
}
完结。