¡Terminó la primera competencia!
¡¡La próxima es el 6 de Marzo!!
Ya que estoy, aclaro cómo funciona en CSAcademy esta parte. Concretamente tu penalidad total es
\texttt{tiempo_ultimo_Accepted} + \sum\limits_{p \in \mathcal{P}} f(p)
Donde f(p) es la penalidad del problema p, que es: f(p) = 5 \log _2(e_p), donde e_p es la cantidad de envíos en el problema p hasta el primer Accepted. Por lo tanto los primeros envíos incorrectos de cada problema son mucho más costosos.
Dejo acá los problemas que me salieron (y cuando termino de codear el D lo agrego más tarde).
Sugarel and Modulo
#include <bits/stdc++.h>
#define forsn(i,s,n) for(tint i=(s);i<(tint)(n); i++)
#define forn(i,n) forsn(i,0,n)
#define dforn(i,n) for(tint i = tint(n)-1; i >= 0; i--)
#define debug(x) cout << #x << " = " << x << endl
using namespace std;
typedef long long tint;
tint mod (tint a, tint b)
{
a %= b;
if (a < 0)
a += b;
return a;
}
int main()
{
#ifdef ACMTUYO
assert(freopen("entrada.in", "r", stdin));
#endif
ios_base::sync_with_stdio(0);
cin.tie(NULL);
tint a,b,m;
while (cin >> a >> b >> m)
{
assert(a <= b);
if (b-a >= m or mod(a,m) > mod(b,m))
cout << m-1 << "\n";
else
cout << mod(b,m) << "\n";
}
return 0;
}
Sugarel and Substrings
#include <bits/stdc++.h>
#define forsn(i,s,n) for(tint i=(s);i<(tint)(n); i++)
#define forn(i,n) forsn(i,0,n)
#define dforn(i,n) for(tint i = tint(n)-1; i >= 0; i--)
#define debug(x) cout << #x << " = " << x << endl
using namespace std;
typedef long long tint;
int main()
{
#ifdef ACMTUYO
assert(freopen("entrada.in", "r", stdin));
#endif
ios_base::sync_with_stdio(0);
cin.tie(NULL);
tint n;
string s;
while (cin >> n >> s)
{
tint total = 0;
forn(i,n)
{
tint mask_letras = 0;
forsn(j,i,n) // nunca avanza mas que alfabeto por palomar.
{
tint letra = tint(s[j]-'a');
if ( (mask_letras & (1LL << letra)) == 0)
{
total++;
mask_letras |= (1LL << letra);
}
else
break;
}
}
cout << total << "\n";
}
return 0;
}
Sugarel and Bars
#include <bits/stdc++.h>
#define forsn(i,s,n) for(tint i=(s);i<(tint)(n); i++)
#define forn(i,n) forsn(i,0,n)
#define dforn(i,n) for(tint i = tint(n)-1; i >= 0; i--)
#define debug(x) cout << #x << " = " << x << endl
using namespace std;
typedef int tint;
const tint MAXN = 131072;
bitset<MAXN> alcanzables[2];
vector<tint> ladj[MAXN];
void dfs(tint actual, tint k)
{
alcanzables[k][actual] = 1;
for (const auto &vecino : ladj[actual])
if (!alcanzables[k][vecino])
dfs(vecino,k);
}
int main()
{
#ifdef ACMTUYO
assert(freopen("entrada.in", "r", stdin));
#endif
ios_base::sync_with_stdio(0);
cin.tie(NULL);
tint n,m;
while (cin >> n >> m)
{
tint x,y;
cin >> x >> y;
x--;
y--;
forn(i,m)
{
tint a,b;
cin >> a >> b;
if (a != b)
ladj[b-1].emplace_back(a-1);
}
dfs(x,0);
dfs(y,1);
bool hay_interseccion = ((alcanzables[0] & alcanzables[1]).count() > 0);
forn(i,n)
{
if (i)
cout << " ";
if (alcanzables[0][i] && alcanzables[1][i])
cout << "0";
else if (alcanzables[0][i] or alcanzables[1][i] or hay_interseccion)
cout << "1";
else
cout << "2";
}
cout << "\n";
}
return 0;
}