Desta vez, 4 perguntas são bronze, 5 ~ 6 perguntas são prata
M Gitignore
Não usei git no jogo ano passado, fiquei muito confuso com a pergunta e assisti por um longo tempo. Então a ideia na quadra era simulação, mas o poder do código era muito ruim e eu não o escrevi, tcl.
O significado da pergunta : gitignore, upload de arquivos, n caminhos devem ser excluídos, m caminhos não podem ser excluídos, o número mínimo de arquivos a serem excluídos é necessário.
Idéias :
Para m que não pode ser excluído, marque todos os seus diretórios pais como 1 e proteja-os.
Então vá para atravessar n para deletar, deixe ans = n, se o diretório vis for 0, isso significa que ele não está protegido, e aparece pela primeira vez, e está marcado como 2, e está marcado como 2 que não está protegido, e a frente apareceu, pode ser mesclado, então ans-1
Código :
#include<bits/stdc++.h>
#include<iostream>
#include <stdio.h>
using namespace std;
const int maxn=2005;
const int base=131;
typedef long long ll;
#define pi acos(-1)
#define INF 0x3f3f3f3f
#define mod 998244353
const int inf=1<<30;
vector<int> g[maxn];
vector<string> str1,str2;
map<string,int> vis;
int main()
{
//freopen("data.in","r",stdin);
//freopen("1.out","w",stdout);
ios::sync_with_stdio(false); cin.tie(0);
int t,n,m;
cin>>t;
while(t--){
cin>>n>>m;
string s;
vis.clear();
str1.clear();
str2.clear();
for(int i = 0; i< n;i++){
cin>>s;
str1.push_back(s);
}
for(int i = 0; i< m;i++){
cin>>s;
str2.push_back(s);
string ss="";
for(int j = 0; j < s.size(); j++){
ss += s[j];
if(s[j] == '/'||j == s.size() - 1){
vis[ss] = 1;
// cout<<ss<<endl;
}
}
}
int ans = n;
for(int i = 0;i < n; i++){
string ss = "";
for(int j = 0;j < str1[i].size(); j++){
ss += str1[i][j];
if(str1[i][j] == '/'||j == str1[i].size() - 1){
//cout<<ss<<endl;
if(vis[ss] == 2){
ans--;
break;
}
if(vis[ss] == 0)
vis[ss] = 2;
}
}
}
cout<<ans<<endl;
}
return 0;
}
B Mine Sweeper II
Idéias :
Questão pensativa, veja se B pode estar em [nm 2] [\ frac {nm} {2}][2n m] A etapa torna-se A ou a matriz oposta de A (ou seja, X torna-se.... ,. .. Torna-se X)
Código :
#include<bits/stdc++.h>
using namespace std;
int n,m;
string s1[1005],s2[1005];
int main()
{
std::ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>s1[i];
for(int i=0;i<n;i++)
cin>>s2[i];
int cnt1,cnt2;
cnt1 =cnt2=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(s2[i][j]!=s1[i][j]) cnt1++;
if(s2[i][j]==s1[i][j])
cnt2++;
}
}
if(cnt1<=(m*n)/2) {
for(int i = 0;i<n;i++)
cout<<s1[i]<<endl;
}
else if(cnt2<=(m*n)/2){
for(int i = 0;i<n;i++){
for(int j = 0 ;j < m;j++){
if(s1[i][j] == 'X')
cout<<".";
else
cout<<"X";
}
cout<<endl;
}
}
else
{
cout<<-1<<endl;
}
system("pause");
return 0;
}
D Walker
Título :
Dada a distância de uma estrada, a posição inicial das duas pessoas e a velocidade, pergunte quanto tempo leva para percorrer a distância total, pelo menos.
Idéias :
A discussão é dividida em três situações: a primeira corre toda por uma pessoa, e a menor é aquela em que ambas as pessoas terminam a corrida.
No segundo tipo, duas pessoas caminham em frente uma da outra, ou seja, a primeira pessoa caminha de p1 para n, e a segunda pessoa caminha de 0 para p2.
No terceiro tipo, as duas pessoas vão para qualquer ponto no meio, e então voltam para suas respectivas direções, e tomam o valor máximo das duas pessoas. A localização específica deste ponto pode ser resolvida bissecção.
Código :
#include<bits/stdc++.h>
using namespace std;
double n,p1,v1,p2,v2,p3;
double ans;
double cal(double x,double p,double v){
return min(x + p,x + x - p) / v;
}
double slove(double l,double r)
{
for(int i = 0; i < 100 ; i++){
double m = (l + r) / 2.0;
double ll = cal(m,p1,v1);
double rr = cal(n - m,p2 - m,v2);
ans = min(ans,max(ll,rr));
if(ll < rr)
l = m;
else
r = m;
}
return ans;
}
int main()
{
std::ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--){
cin>>n>>p1>>v1>>p2>>v2;
if(p1 > p2){
swap(p1,p2);
swap(v1,v2);
}
double t1 = min(cal(n,p1,v1),cal(n,p2,v2));
double t2 = max((n - p1) / v1,p2 / v2);
ans = min(t1,t2);
double t3 = slove(p1,p2);
printf("%.10lf\n",ans);
}
return 0;
}
I Sky Garden
Código :
#include<bits/stdc++.h>
#include<iostream>
#include <stdio.h>
using namespace std;
const int maxn=2005;
const int base=131;
typedef long long ll;
#define pi acos(-1)
#define INF 0x3f3f3f3f
#define mod 998244353
const double PI = acos(-1);
const int inf = 1<<30;
double a[maxn],b[maxn];
int main()
{
//freopen("data.in","r",stdin);
//freopen("1.out","w",stdout);
ios::sync_with_stdio(false); cin.tie(0);
int n,m;
cin>>n>>m;
double cnt = 0.0;
for(int i = 1; i < 2 * m;i++){
cnt += min(2.0, PI * min(i*1.0,2.0 * m - i) / m);
}
a[1] = b[1] = cnt;
for(int i = 2;i <= n;i++){
b[i] = i * 1.0 * b[1];
a[i] = a[i - 1] + b[i] + 2.0 * m * (i - 1);
}
double ans = 0.0;
for(int i =1 ;i <= n;i++){
ans += (a[i] - b[i]) * 2.0 * m + b[i] * 2.0 * m / 2.0;
if(m > 1)
ans += 2.0 * m * i;
}
printf("%.10lf\n",ans);
return 0;
}