····我好菜,完全没有准确率只写了签到,完全被吊打QAQ
大概就是自己懒惰的后果吧qwq
A 塞特斯玛斯塔
签到···我因为是多组样例wa了一发····
#include <bits/stdc++.h>
using namespace std;
char s[100010];
int main()
{
int t,n;scanf("%d",&t);
while(t--){
scanf("%d",&n);
int cnt=0;
for(int i=1;i<=n;i++)
{
scanf("%s",s);
if(s[0]==‘P‘)cnt++;
}
if(cnt==n)printf("MILLION Master\n");
else printf("NAIVE Noob\n");
}
}
B 外挂使用拒绝
很像是多校赛的那题····然后多校赛没补···这题就很没有什么思路···
C萌萌哒身高差
打表就可以看出来结论···我推了很长时间(???????)然后打了个表==很简单的结论人然后就A了。
#include <bits/stdc++.h>
using namespace std;
double a[100010];
int main()
{
int t,n,k;scanf("%d",&t);
a[1]=0;
int tot = 3;
for(int i=2;i<=100;i++)
{
a[i]=a[i-1]+tot;tot+=2;
}
while(t--){
scanf("%d",&n);
printf("%.9f\n",a[n]/3);
}
}
D雷电爆裂之力
枚举每个中间的找两边的最近的就行··因为我sb,一个地方m写成了k wa了一个半小时==
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
ll a[2000010],b[2000010],c[2000010];
ll abss(ll x){return x>0?x:-x;}
void solve()
{
int n,m,k;scanf("%lld%lld%lld",&n,&m,&k);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);sort(a+1,a+1+n);
for(int i=1;i<=m;i++)scanf("%lld",&b[i]);sort(b+1,b+1+m);
for(int i=1;i<=k;i++)scanf("%lld",&c[i]);sort(c+1,c+1+k);
int r1 = 1,r2 = 1,r3=1;
a[0]= -2e12;c[0]=-2e12;
c[k+1] = a[n+1]=2e12;
ll ans = 2e12;
for(int i=1;i<=m;i++)
{
while(r1<=n&&a[r1]<b[i])r1++;
while(r2<=k&&c[r2]<b[i])r2++;
ans = min(ans,min(abss(c[r2]-b[i]),abss(c[r2-1]-b[i]))+min(abss(a[r1]-b[i]),abss(a[r1-1]-b[i])));
}
printf("%lld\n",ans+3);
}
main()
{
int t;scanf("%lld",&t);
while(t--)solve();
}
E可以来拯救吗
待补
F汤圆防漏理论
开个优先队列每次取当前点权最小的点删了然后每次更新ans。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<pair<int,ll> > g[1000010];
ll d[1000010];
int vis[1000010];
void solve()
{
int n,m;scanf("%d%d",&n,&m);
int u,v;ll w;
for(int i=1;i<=n;i++)g[i].clear(),d[i]=vis[i]=0;
for(int i=1;i<=m;i++)
{
scanf("%d%d%lld",&u,&v,&w);
g[u].push_back({v,w});g[v].push_back({u,w});
d[u]+=w;d[v]+=w;
}
priority_queue<pair<ll,int>> que;
for(int i=1;i<=n;i++)que.push({-d[i],i});
ll ans = 0;
while(!que.empty())
{
pair<ll,int> now = que.top();que.pop();
int u = now.second;if(vis[u])continue;
vis[u]=1;ans = max(ans,d[u]);
for(int i=0;i<g[u].size();i++)
{
int v = g[u][i].first;
d[v]-=g[u][i].second;
que.push({-d[v],v});
}
}
printf("%lld\n",ans );
}
int main(int argc, char const *argv[])
{
int t;scanf("%d",&t);
while(t--)solve();
return 0;
}
G命名规范问题
简单模拟
#include <bits/stdc++.h>
using namespace std;
char s[2000010];
int isbig(char x)
{
if(x<=‘Z‘&&x>=‘A‘)return 1;
return 0;
}
void solve()
{
scanf("%s",s+1);int n = strlen(s+1);
if(n <= 2||isbig(s[2])||isbig(s[n])){printf("%s\n",s+1);return ;}
int cnt=0;
for(int i=1;i<=n;i++)
{
if(isbig(s[i]))cnt++;
}
if(isbig(s[1])&&cnt == 1){
printf("%s\n",s+1);return;}
for(int i=1;i<n;i++)
{
if(isbig(s[i])&&isbig(s[i+1]))
{
printf("%s\n",s+1);return;
}
}
for(int i=1;i<=n;i++)
{
if(i == 1&&isbig(s[i]))printf("%c",s[i]-‘A‘+‘a‘);
else if(isbig(s[i]))printf("_%c",s[i]-‘A‘+‘a‘);
else printf("%c",s[i]);
}
puts("");
}
int main()
{
int t;scanf("%d",&t);
while(t--)solve();
}
H吾好梦中做题
待补
I如何办好比赛
QAQ赛时读错题了,其实是个简单题·····
因为比赛的时候没a==···(我好菜
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
char s[1000010];
int sum[1000010];
void solve()
{
int n,m;scanf("%d%d",&n,&m);
scanf("%s",s+1);
ll ans =0;
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1]+(s[i]==‘D‘);
ans += sum[i]*(s[i]==‘M‘);
}
if(1ll*m>1ll*sum[n]*(n-sum[n]))printf("-1\n");
else
{
printf("%lld\n",(ll)abs(ans - m) );
}
}
int main(int argc, char const *argv[])
{
int t;scanf("%d",&t);
while(t--)solve();
return 0;
}
J小白兔小灰兔
待补
K好学期来临吧
赛时还有十分钟的时候看了一眼··觉得是个dp没时间写了····然后就凉了,然后赛后听了一下zhberDP_(:з」∠)_
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[1001],b[101];
ll d[1001][101][101][2];
void solve()
{
int n,m;scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<=m;i++)scanf("%lld",&b[i]);
sort(b+1,b+1+m);
for(int i=1;i<=n;i++)
{
d[i][0][m+1][1] = d[i-1][0][m+1][0]+a[i];d[i][0][m+1][0] = max(d[i-1][0][m+1][1],d[i-1][0][m+1][0]);
for(int k=m;k>=1;k--){
d[i][0][k][1]=max(d[i-1][0][k][0]+a[i],d[i][0][k+1][0]+b[k]);
d[i][0][k][0]=max(max(d[i][0][k+1][1], d[i][0][k+1][0]),max(d[i-1][0][k][1],d[i-1][0][k][0]));
}
for(int j = 1;j<=m;j++)
{
d[i][j][m+1][1]=d[i-1][j][m+1][0]+a[i];
d[i][j][m+1][0]=max(max(d[i][j-1][m+1][1], d[i][j-1][m+1][0]),max(d[i-1][j][m+1][0],d[i-1][j][m+1][1]));
}
for(int j=1;j<=m;j++)
{
for(int k = m;k>j;k--)
{
d[i][j][k][1] = max(d[i-1][j][k][0]+a[i],d[i][j][k+1][0]+b[k]);
d[i][j][k][0] = max(max(d[i-1][j][k][0],d[i-1][j][k][1]),max(d[i][j-1][k][1],d[i][j-1][k][0]));
}
}
}
ll ans =0;
for(int i=1;i<=m;i++)for(int j=m;j>i;j--)for(int k=0;k<=1;k++)ans = max(ans,d[n][i][j][k]);
printf("%lld\n",ans );
}
int main()
{
int t;scanf("%d",&t);
while(t--)solve();
}