A 同源
规律:n=n/k;
如果n%k≠0,则一定输出-1 -1 -1,去掉这个判断,通过率只有37.5%
举个例子,n=25,k=2;程序实际输出的是4 6 14,这三个数加起来等于24,不等于25,这是一个wa点
只要输出一组数据即可
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll gcd(ll a,ll b) { return (b>0)?gcd(b,a%b):a; } int main() { ll t; scanf("%lld",&t); while(t--) { ll f=1; ll n,k; scanf("%lld%lld",&n,&k); if(n%k==0) { n/=k; for(ll i=2; i<=10; i++) { for(ll j=2; j<=10; j++) { ll kk=n-i-j; if(kk<=1) continue; if(gcd(i,j)==1&&gcd(i,kk)==1&&gcd(j,kk)==1&&i!=j&&i!=kk&&j!=kk) { f=0; printf("%lld %lld %lld ",i*k,j*k,kk*k); break; } } if(f==0) break; } } if(f) printf("-1 -1 -1 "); } }
循环体中的kk表示的是第三个数,第三个数有可能会存在比2小的数,在这里需要对kk做一个特判,如果小于2则跳过j++,否则根据题目意思进行判断,找到了用f标记一下,f=0即为找到,直接跳出两个for循环体,未找到,将在循环外输出默认的-1 -1 -1。
为了让运行时间更短对i和j进行了限制,规定循环均只从2~10,至于kk只要大于等于2即可,大大压缩了时间。
B 分子
字符串模拟
s表示最终的分子量,sum表示部分的分子量,为临时变量,num表示数字下标
读到'('的时候把临时变量sum加到s上,清空sum内容,准备读取括号内部的分子量。如果读到数字,从左到右一位一位的读入到num中,若下一个字符是非数字字符(包括后括号和字母),则清空num中的内容,同理读到')',也是一样的。
#include<bits/stdc++.h> using namespace std; typedef long long ll; string str; ll ele(ll i) { if(str[i]=='C') return 13; if(str[i]=='H') return 1; if(str[i]=='O') return 17; } int main() { cin>>str; ll len=str.length(); ll s=0,sum=0,e,num=0; ll i=0; while(i<len) { if(str[i]=='C'||str[i]=='H'||str[i]=='O') { e=ele(i); i++; while(str[i]>='0'&&str[i]<='9') { num=num*10+str[i]-'0'; i++; } if(num) { e*=num; num=0; } sum+=e; } if(str[i]=='(') { i++; s+=sum; sum=0; } if(str[i]==')') { i++; while(str[i]>='0'&&str[i]<='9') { num=num*10+str[i]-'0'; i++; } if(num) { sum*=num; num=0; } s+=sum; sum=0; } } printf("%lld ",s+sum); }
C 爵士
水题,用getline读取每一行的字符串,判断更字符串内是否含有2,s2++,输出 s/ 全部字符串(n) ,保留10位小数。
#include <bits/stdc++.h> #define T int t ;cin >> t;while(t--) using namespace std ; typedef long long ll; int main() { T { ll n; scanf("%lld",&n); double s2=0,sall=n; string s; getchar(); while(n--) { getline(cin,s); for(ll j=0; j<s.length(); j++) { if(s[j]=='2') { s2++; break; } } } double sum=0; sum=s2/sall; printf("%.10lf ",sum); } }
E-内存
大模拟
F 游戏
不管如何,输出Yes就对了
C++14最短代码:
#include<cstdio> main(){int t;scanf("%d",&t);while(t--)printf("Yes ");}