Codeforces Round #786 (Div. 3)


枚举一下就好

点击查看代码
#include
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
int T; 
int ksm(int a,int b){
	int res=1;
	while(b){
		if(b&1)res*=a;
		a*=a;b>>=1;
	}
	return res;
}
void solve();
int main(){
	cin>>T;
	while(T--)solve();
     return 0;
}
void solve(){
	int a,b;
	scanf("%d%d",&a,&b);
	if(b%a){
		printf("0 0\n");
		return;
	}
	int t=b/a;
	if(t==1){
		printf("1 1\n");
		return;
	}
	for(int i=2;i<=100;i++)
	for(int j=1;;j++){
		int kk=ksm(i,j);
		if(t==kk){
			printf("%d %d\n",j,i);
			return;
		}
		else if(t

判断一下就好 没啥好说的

点击查看代码
#include
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
int T;
string s;
void solve();
int main(){
	cin>>T;
	while(T--)solve();
     return 0;
}
void solve(){
	cin>>s;
	int t1=s[0]-'a';
	int ans=t1*25;
	t1++;
	int t2=s[1]-'a';t2++;
	if(t2>t1)t2--;
	ans+=t2;
	cout<

首先判断只有一种可能的情况 t字符串里面没有'a' 或者有且只有一个'a'没有其他字符

考虑无限的情况 t中有一个'a'并且长度大于1

考虑有限的情况 设s中有cnt个'a' 每个'a'有换与不换两种选择 根据乘法原理 答案为ksm(2,cnt)

点击查看代码
#include
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
int T;
ll ksm(ll a,ll b){
	ll res=1;
	while(b){
		if(b&1)res*=a;
		a*=a;b>>=1;
	}
	return res;
}
void solve();
int main(){
	cin>>T;
	while(T--)solve();
     return 0;
}
void solve(){
	string s,t;
	int cnt=0;
	cin>>s>>t;
	int l1=s.size(),l2=t.size();
	for(int i=0;i

发现规律 a[n]和a[n-1]一定是分居两侧 两者先后循序可以改变 取的话也是

所以从后往前两两排序 如果最终能够将整个序列排序 那就是YES 否则为NO

点击查看代码
#include
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
const int maxn=2e5+5;
int T;
int a[maxn];
void solve();
int main(){
	cin>>T;
	while(T--)solve();
     return 0;
}
void solve(){
	int n;cin>>n;
	for(int i=1;i<=n;i++)
	scanf("%d",&a[i]);
	int pre=1e9;
	for(int i=n;i>=1;i-=2){
		if(i-1>=1){
			if(pre