2018bnu校赛总结

····我好菜,完全没有准确率只写了签到,完全被吊打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();
}

原文地址:https://www.cnblogs.com/miamiao/p/8724358.html

时间: 2024-10-09 12:34:55

2018bnu校赛总结的相关文章

2018BNU校赛总决赛

题解是qls的题解我就懒得写了23333 A塞特斯玛斯塔 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 quailty是一名狂热的ACM音游选手,沉迷各种音乐游戏,比如Lunatic Rave 2,osu!之类的. 今天,quailty玩的是国内游戏厂商雷亚(并不是赞助商)出品的一款音乐游戏Cytus. 游戏中,玩家需要随着游戏界面中上下移动的扫描线来适时演奏对应音符. 当上下移动的黑色线

CSU 1425 NUDT校赛 I题 Prime Summation

这个题本来有希望在比赛里面出了的 当时也想着用递推 因为后面的数明显是由前面的推过来的 但是在计算的时候 因为判重的问题 ...很无语.我打算用一个tot[i]来存i的总种树,tot[i]+=tot[j]//j为可以由j推到i的一系列数,但这样是不对的,会产生大量重复计算... 看了下标程才发现要用二维来计算出种类总数,f[i][j]+=sum(f[i-j][k]) 表示在推i数的时候,第一个素数为j的种类数,注意j一定为素数,而且k不能大于j...标程里面处理的比较简练,就学了下他的写法. 至

校赛总结

写写校赛总结....... 这两次校赛是我们组队以后第一次的比赛...第一场打得很拙,第二场还可以吧,第一场校赛--毕竟是期待了很久的校赛,所以感觉还是很紧张,吃饭的时候打了二两,剩了一大半==, 这次我们队名叫 I_Love_High_Math......没走到现场,就快下雨了,真的有点郁闷==.到了以后下雨了,和一个队友被困雨中,,出来以后衣服湿了,一开始就悲剧了...     然后一开场就感觉不好.比赛开始的时候,我去写头文件,然后W说A是水题,然后叫我写,平时都是我写第一题的这次我不想开

NYOJ-682 小媛在努力 (郑大第六届校赛 模拟)

链接:click here 题意: 描述 在多媒体数据处理中,数据压缩算法尤为重要.小媛上完课后就想自己发明一个数据压缩算法.她想呀想,终于想到一个方法.在多媒体数据中有很多数据都是重复的,所以她想把连续相同的数据用数据出现的次数和数据本身表示.例如:1 1 1 2 3 3 3 3 3  压缩后及为3 1 1 2 5 3(表示3个1,1个2和5个3).有想法后小媛就希望把它用代码实现了.但是大家都知道小媛现在整天都忙着苦B的复习考研,连电脑都摸不到.所以她希望作为ACMer的你帮她写一下. 输入

HDU多校赛第9场 HDU 4965Fast Matrix Calculation【矩阵运算+数学小知识】

难度上,,,确实,,,不算难 问题是有个矩阵运算的优化 题目是说给个N*K的矩阵A给个K*N的矩阵B(1<=N<=1000 && 1=<K<=6),先把他们乘起来乘为C矩阵,然后算C^(N*N) 相当于 ABABABABABABAB...=(AB)^(N*N) 不如 A(BA)^(N*N-1)B 因为BA乘得K*K的矩阵,K是比较小的 #include <cstdio> #include <cstdlib> #include <cstr

ZJU校赛 一道计数题

题意是这样的 给定一个n*m的整数矩阵 n和m均小于1000 对这个矩阵删去任意行和列后剩余一个矩阵为M{x1,x2,,,,xm;y1,y2,,,,,yn}表示删除任意的M行N列 对于这个剩下的矩阵,我们考虑其中是否存在特殊的元素,保证这些元素是所在行最大,所在列最小的元素 且非之一. 求对于所有删法,上述元素个数之和 对10^9+7取余. 显然所有删法 有2^(n+m)种 暴力是搞不定的. 于是反过来看,矩阵的元素最多有10^6个 是不是可以考虑每一个元素对最终答案的贡献? 所谓贡献,就是它在

山科第三届校赛总结

这次山科的校赛算是省赛前的一次正式的检验吧,暴露了我们队伍之前训练很多没发现的问题. 比赛的过程真的算是有惊无险,差点就GG... 我们入场晚了一会,我刚读完C题,就发现已经有人过了F题了,我去看F题,是个统计闰年的水题,很快就敲过了.回去想接着看C,感觉也很水,这时cerberux说这个用个map就A了,我让他来敲,可是他好像用的不是很熟练,这道题敲的很慢,交上去还wa了...我回过头仔细看这题,觉得扫一遍统计一次最多连续出现的次数就可以了,这才把这个水题过了.然后我去敲G,G题我出现了很严重

BZOJ 3093: [Fdu校赛2012] A Famous Game

3093: [Fdu校赛2012] A Famous Game Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 242  Solved: 129[Submit][Status][Discuss] Description Mr. B and Mr. M like to play with balls. They have many balls colored in blue and red. Firstly, Mr. B randomly picks

[第十届校赛]简单总结

这次校赛其实是抱着比较大的期望来打的,首先我是单挑,好像自从去年蓝桥杯后就没有一个人做过比赛,一般都是组队做,这次单挑,是想测测自己的水平和对节奏的把握,也有夺冠的冲动,很可惜,整体上是失败了TAT.如果一开始就稳扎稳打,说不定真的可以题数碾压.. 做完胡老师出的三个水题后,交了一发卡精度的二分,节奏就开始乱了.首先我自认为我的思路很正确,并且已经将误差降到很低了,但陆陆续续wa了7发,wa的原因自然是精度问题.大概比赛结束前2个小时,我把精度加大了一位,居然奇迹般的过了,无语..我一直以为比目