A.同源
这题只需要两个for循环暴力模拟就可以过了
但是有没有大佬在下面讲解一下原理,为什么只要循环到10就能跑出来。。
直接上AC代码:
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define T int t ;cin >> t;while(t--)
using namespace std ;
typedef long long ll;
typedef unsigned long long ull;
inline ll gcd(ll a,ll b){return b == 0? a:gcd(b, a % b);}
inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll Mode(ll a, ll b, ll mode) {ll sum = 1;if(mode == 1)return 0 ;while (b) {if (b & 1) {sum = (sum * a) % mode;b--;}b /= 2;a = a * a % mode;}return sum;}
const int maxn = 2e5 + 10;
const int INF = 0x3f3f3f3f;
const double eps = 1e-11;
const ll mod = 1e9 + 7;
ll n , k ;
void solve()
{
scanf("%lld%lld",&n,&k) ;
int flag = 0 ;
if(n%k == 0){
n /= k ;
for(ll i = 2 ; i <= 10 ; i++){
for(ll j = i ; j <= 10 ; j++){
ll z = n - i - j ;
if( z <= 1) continue ;
if(gcd(i,j)==1&&gcd(i,z)==1&&gcd(z,j)==1){
printf("%lld %lld% lld\n",k*i,k*j,k*z) ;
flag = 1 ;
break ;
}
}
if(flag)
break ;
}
}
if(!flag)
printf("-1 -1 -1\n") ;
}
int main()
{
T{
solve() ;
}
return 0 ;
}
B.分子
这个题目就是算化学式的分子量。
题目还是很友好的,只给了我们3个不同的元素,并且保证了没有括号套括号的样例,只要简单的暴力就行
下面就是AC代码
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define T int t ;cin >> t;while(t--)
using namespace std ;
typedef long long ll;
typedef unsigned long long ull;
inline ll gcd(ll a,ll b){return b == 0? a:gcd(b, a % b);}
inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll Mode(ll a, ll b, ll mode) {ll sum = 1;if(mode == 1)return 0 ;while (b) {if (b & 1) {sum = (sum * a) % mode;b--;}b /= 2;a = a * a % mode;}return sum;}
const int maxn = 2e5 + 10;
const int INF = 0x3f3f3f3f;
const double eps = 1e-11;
const ll mod = 1e9 + 7;
char a[maxn] ;
ll end = 0 ,xlen;
int y[3] = {13,1 ,17} ;
ll findnum(int x){ //处理出现数字的问题(都是字符串的方式读取的)
ll num = 0 ;
for(int i = x ; i < xlen ;i++){
if(a[i] > '9' ||a[i] < '0'){
end = i;return num ;
}
else{
num = num*10 + (a[i] - '0') ;
}
}
}
ll kuohao(int x){ //解决出现括号的问题
ll ans = 0 ;
for(int i = x ;i < xlen ; i++){
if(a[i] == ')'){
if(a[i+1] >='0'&&a[i+1] <='9')
return ans *findnum(i+1) ;
else{
return ans ;end = i ;
}
}
else{
int cnt = 0 ;
if(a[i] == 'C') cnt=y[0] ;
else if(a[i] == 'H') cnt = y[1] ;
else cnt=y[2] ;
if(a[i+1] >='0'&&a[i+1] <='9'){
ans += cnt *findnum(i+1) ;
i = end - 1 ;
}
else{
ans += cnt ;
}
}
}
}
void solve()
{
scanf("%s",a) ;
xlen = strlen(a) ;
ll ans = 0 ;
for(int i = 0 ; i < xlen ;i++){
int cnt = 0 ;
if(a[i] == '('){
ans +=kuohao(i) ;
i = end - 1;
continue ;
}
else if(a[i] == 'C') cnt=y[0] ;
else if(a[i] == 'H') cnt = y[1] ;
else cnt=y[2] ;
if(a[i+1] >='0'&&a[i+1] <='9'){
ans += cnt *findnum(i+1) ;
i = end - 1 ;
}
else
{
ans += cnt ;
}
}
printf("%lld\n",ans) ;
}
int main()
{
solve() ;
return 0 ;
}
F.游戏
只要输出Yes就可以啦。。
不论如何,只要是先手,都是获胜的。
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define T int t ;cin >> t;while(t--)
using namespace std ;
typedef long long ll;
typedef unsigned long long ull;
inline ll gcd(ll a,ll b){return b == 0? a:gcd(b, a % b);}
inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll Mode(ll a, ll b, ll mode) {ll sum = 1;if(mode == 1)return 0 ;while (b) {if (b & 1) {sum = (sum * a) % mode;b--;}b /= 2;a = a * a % mode;}return sum;}
const int maxn = 2e5 + 10;
const int INF = 0x3f3f3f3f;
const double eps = 1e-11;
const ll mod = 1e9 + 7;
int main()
{
T
{
int n ;
cin >> n ;
for(int i = 0 ; i < n ; i++){
int a,b ;
cin >> a >> b ;
}
printf("Yes\n") ;
}
return 0 ;
}