A. EHAB y LOs GCD
Significado de las preguntas:
Se le da un número entero positivo \ (x \) . Encuentra cualquier tales \ (2 \) números enteros positivos \ (a \) y \ (b \) de tal manera que \ (GCD (a, b) + LCM (a, b) = x \)
for _ in range(int(input())):
x = int(input())
print(*[1,x-1])
B. CopyCopyCopyCopyCopy
Significado de las preguntas:
Una secuencia puede ser replicado varias veces, pidiendo LIS más largas
for _ in range(int(input())):
ans = set()
n = int(input())
L = list(map(int,input().split()))
for i in L:
ans.add(i)
print(len(ans))
C. Ehab y MEXS PATH-etic
Significado de las preguntas :
A un árbol, el lado derecho de la petición de asignación a \ (0 \) a \ (n- 2 \) , por lo que \ (MEX (u, v) \) del valor máximo del mínimo
\ (MEX (u, v) \) representa no aparece en \ (U \) a \ (V \) el valor mínimo de los pesos de trayectoria
ideas:
Si el nodo es mayor que igual a \ (3 \) , a partir de \ (0 \) comienza lado derecho están dispuestos en orden, para que cualquier camino no puede ocurrir simultáneamente \ (0 \) , \ (1 \) , \ ( 2 \)
\ (MEX (u, v) \) no será mayor que \ (2 \)
Si no, entonces una cadena, dispuesto al azar
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int deg[maxn];
pair<int,int>Edge[maxn];
int main(){
int n;scanf("%d",&n);
for(int i = 0;i < n - 1;i++){
scanf("%d%d",&Edge[i].first,&Edge[i].second);
deg[Edge[i].first]++;deg[Edge[i].second]++;
}
int k = -1;
for(int i = 1;i <= n;i++){
if(deg[i] >= 3){
k = i;
break;
}
}
if(k == -1){
for(int i = 0;i < n - 1;i++){
printf("%d\n",i);
}
}
else{
int t = deg[k];
int x = 0;
for(int i = 0;i < n - 1;i++){
if(Edge[i].first == k || Edge[i].second == k){
printf("%d\n",x++);
}
else{
printf("%d\n",t++);
}
}
}
}
D. Ehab la Xorcist
Significado de las preguntas:
Para \ (U \) y \ (V \) , o de diferentes números de todas las \ (U \) y como \ (V \) matriz más corta
ideas:
Si \ (T> v \) , no hay solución.
Orden \ (T = V - T \) , la \ (T \) se dividió en dos números, si el \ (T \) es impar, no hay solución
Dividir en \ (U, K, K \) , donde \ (2k = t \)
En el bit correspondiente de cada uno de lado extraídos.
#include<bits/stdc++.h>
using namespace std;
int bit[2000];
void init(long long u,long long t){
int now = 0;
while(u){
if(u&1ll){
bit[now]++;
}
u >>= 1ll;
now++;
}
now = 0;
while(t){
if(t&1ll){
bit[now]+=2;
}
t >>= 1ll;
now++;
}
}
int main(){
long long u,v;
cin >> u >> v;
if(u == v && u == 0){
cout << 0 << endl;
return 0;
}
if(u > v || ((v - u) & 1)){
cout << - 1 << endl;
}
else{
init(u,v-u>>1ll);
vector<long long>ans;
int ok = 1;
while(ok){
long long t = 0;
for(int i = 0;i < 200;i++){
if(bit[i]){
bit[i]--;
t += (1ll << i);
}
}
if(t == 0){
ok = false;
}
else{
ans.push_back(t);
}
}
cout << ans.size() << endl;
for(int i = 0;i < ans.size();i++){
cout << ans[i] << " ";
}
}
}