A EhAb AnD gCd
题意:
给你一个数x。
要求你找到两个数,使得 g c d ( a , b ) + l c m ( a , b ) = x gcd(a,b)+lcm(a,b)=x gcd(a,b)+lcm(a,b)=x
思路:
简单数学的构造。可以想到用1和x-1就好了。
AC
/*
皮卡丘冲鸭!
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
イ● 、 ● ⊂⊃〈 /
() へ | \〈
>ー 、_ ィ │ //
/ へ / ノ<| \\
ヽ_ノ (_/ │//
7 |/
>―r ̄ ̄`ー―_
*/
#include <iostream>
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define mst(x,a) memset(x,a,sizeof(x))
#define pb push_back
#define sz(a) (int)a.size()
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int>pa;
typedef pair<ll,ll>pai;
const int N = 1e3;
const int M = 1e5;
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int tt;
cin>>tt;
while(tt--){
int x;
cin>>x;
cout<<1<<' '<<x-1<<endl;
}
return 0;
}
B CopyCopyCopyCopyCopy
题意
给你一个数组,问你进行,n次复制后,最长上升子序列的长度是多少。
思路:
题目观察,可以发现,可以贪心的在n个n大小的数组中,每次都选择一个元素。
其实就是排序之后,之后unique操作。
AC
/*
皮卡丘冲鸭!
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
イ● 、 ● ⊂⊃〈 /
() へ | \〈
>ー 、_ ィ │ //
/ へ / ノ<| \\
ヽ_ノ (_/ │//
7 |/
>―r ̄ ̄`ー―_
*/
#include <iostream>
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define mst(x,a) memset(x,a,sizeof(x))
#define pb push_back
#define sz(a) (int)a.size()
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int>pa;
typedef pair<ll,ll>pai;
const int N = 1e3;
const int M = 1e5;
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int tt;
cin>>tt;
while(tt--){
int n;
cin>>n;
vector<int> v(n);
fori(i,0,n)cin>>v[i];
sort(v.begin(),v.end());
int pre = v[0], ans = 1;
fori(i,1,n){
if(v[i]!=pre)ans++;
pre = v[i];
}
cout<<ans<<endl;
}
return 0;
}
CEhab and Path-etic MEXs
题意:
给一颗树的每一条边编号,使得任意两点之间 MEX的最小的编号,这个编号在这两个点间的边之间没有被使用。
找到一种构造使得,所有pair间的最大值MEX尽可能小。
思路:
可以从点的度出发,一个点的度大于2时,把它连接的边都标号。
AC
/*
皮卡丘冲鸭!
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
イ● 、 ● ⊂⊃〈 /
() へ | \〈
>ー 、_ ィ │ //
/ へ / ノ<| \\
ヽ_ノ (_/ │//
7 |/
>―r ̄ ̄`ー―_
*/
#include <iostream>
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define mst(x,a) memset(x,a,sizeof(x))
#define pb push_back
#define sz(a) (int)a.size()
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int>pa;
typedef pair<ll,ll>pai;
const int N = 1e3;
const int M = 1e5+10;
int x[M], y[M];
vector<pa> e[M];
int ans[M];
int in[M], deg[M], degB[M];
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n;
cin>>n;
fori(i,0,n-1)cin>>x[i]>>y[i],in[x[i]]++,in[y[i]]++;
fori(i,0,n-1){
e[x[i]].pb(mp(y[i],i));
e[y[i]].pb(mp(x[i],i));
}
mst(ans,-1);
int cnt= 0;
For(i,1,n){
if(in[i]>2){
for(auto p : e[i]){
int idx = p.se;
if(ans[idx]==-1)ans[idx]=cnt++;
}
}
}
/*
fori(i,0,n-1){
degB[i] = deg[i] = in[x[i]]+in[y[i]];
}
sort(degB,degB+n-1);
// int ans[M]{};
priority_queue<pa> q;
fori(i,0,n-1){
int idx = lower_bound(degB,degB+n-1,deg[i])-degB;
q.push(mp(idx,i));//if(idx)
}
int cnt = 0;
while(!q.empty()){
int idx = q.top().se;q.pop();
ans[idx] = cnt;
cnt++;
}
*/
fori(i,0,n-1)
if(ans[i]==-1)cout<<(cnt++)<<endl;
else cout<<ans[i]<<endl;
return 0;
}
DEhab the Xorcist
思路
AC
/*
皮卡丘冲鸭!
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
イ● 、 ● ⊂⊃〈 /
() へ | \〈
>ー 、_ ィ │ //
/ へ / ノ<| \\
ヽ_ノ (_/ │//
7 |/
>―r ̄ ̄`ー―_
*/
#include <iostream>
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define mst(x,a) memset(x,a,sizeof(x))
#define pb push_back
#define sz(a) (int)a.size()
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int>pa;
typedef pair<ll,ll>pai;
const int N = 1e3;
const int M = 1e5;
typedef long long ll;
int main()
{
//ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
ll u,v;
cin>>u>>v;
if(u>v)return 0*printf("-1");
if(u==0&&v==0)return 0*printf("0");
if(u==v) return 0*printf("1\n%lld",v);
if((v-u)%2==0){
ll a = (v-u)/2;
if((u&a)==0) return 0*printf("2\n%lld %lld",u+a,a);
else return 0*printf("3\n%lld %lld %lld", u, a, a);
}
printf("-1");
return 0;
}