Logo xushuoxin的博客

博客

引进一下从洛谷上搞来的科技,另外问个东西

2023-05-24 19:41:05 By xushuoxin

计数器:(刷新下试试)

还有动画和彩字,不过该网站不支持显示

在这里问一下啊,

下一次月赛什么时候?能搞难一点吗?

真是离离原上谱(1)

2023-05-14 21:05:37 By xushuoxin

出bug了!!!

比赛评分出了问题,老师去找管理部门的了.也有可能没去……

但是,大家评测失误都是0分,为什么别人没加没减,我白白扣了152.

这不符合能量守恒定律啊喂(加的rating应该等于减的rating)!!

所以,我浅浅的问一句:到时候第一名加了rating,这152是不是就一去不复返了?!

奇妙改编

2023-05-10 21:43:57 By xushuoxin

唧唧复唧唧,木兰开飞机, 开的什么机?波音747!

问女何所思,问女何所忆。女亦有所思,没钱买飞机。

昨夜见军帖,要用轰炸机,飞机十二架,架架买不起。

阿爷无大钱,木兰无金银,愿去买钢铁,从此造飞机。

东市买图纸,西市买螺丝,南市买玻璃,北市买铁皮。

旦辞爷娘去,暮宿旧机库,不闻爹娘唤女声,但闻铁皮摩擦滋啦声。

旦辞机库去,暮至军营旁,不闻爹娘唤女声,但闻将军大呼哈哈哈。

万里开飞机,关山一下没。热气传机翼,日光照玻璃。

将军被吓死,壮士魂已飞。飞来撞天子,天子躺病床.

策勋十二转,赏赐俩耳光。可汗问所欲,木兰不愿进牢房;愿开747,飞着回故乡。

爹娘闻女来,端起机关枪;阿姊闻妹来,当户举手枪;小弟闻姊来,磨刀霍霍向爹娘。

开我机舱门,进我飞机舱,脱我战时袍,换上飞行装, 多装手榴弹,对外架机枪。

出门埋炸弹,亲友皆惊忙:离别十二年,不知木兰变猖狂。

疯子脚蹬地,呆子眼紧闭,两人并排走,谁能说我不正常?

能否完善交互题测评机制

2023-05-08 19:45:02 By xushuoxin

系统上的交互题完全没法做,会报Judgement Failed,

希望完善一下,交互题也是需要练的,例如去年省赛第5题

另外,提个建议,下次月赛能否分成两波人比赛,以rating 1600为分界线,高于1600的在一场比赛,低于或等于1600的在另一场比赛,两场比赛同时进行,不然实力差距过大导致不公平

警示后人

2023-05-07 12:48:10 By xushuoxin

一失手成千古恨,再回头是第四名

我**,就少了一个判断(j%2==1),D题就成了54分.

不然我就是第二名啊啊啊啊啊啊啊!

警示后人:

做题千万条,审题第一条,判断不规范,rating两行泪

论月赛5道题都是洛谷真题这件事

2023-05-07 12:22:05 By xushuoxin

大无语事件

只要搜索题目的标签,2023 CCC-J就能找到

论比赛是否不公平

2023-05-07 09:43:12 By xushuoxin

注意看,5月月赛D题40个数据点,每个数据点2分,即总分80分.

可是全对的额外加了20分,不全对只按对的数据点给分.

这不就不公平了吗?

建议老师再加入10个数据凑到总分100(或者把这20分送给我们也行)

请按标准赛制进行评分!!!

2023年5月月赛 题解

2023-05-06 22:39:40 By xushuoxin

趁着别人还没出题解,我赶紧连夜写完.

A.Deliv-e-droid 题目链接

简单,语法题,全员AC,直接上代码.

#include<iostream>
using namespace std;
int p,s,c;
int main(){
    cin>>p>>c;
    if(p>c) s=500;
    s+=p*50,s-=c*10;
    cout<<s;
    return 0;
}

B.辣椒 题目链接

简单,又是一道送分题(兼水题,数据太小了,应该设个开long long的坑),上代码

#include<iostream>
using namespace std;
long long n,i,p;
string s;
int main(){
    cin>>n;
    for(i=0;i<n;i++){
        cin>>s;
        if(s=="Poblano")
            p+=1500;
        if(s=="Cayenne")
            p+=40000;
        if(s=="Mirasol")
            p+=6000;
        if(s=="Serrano")
            p+=15500;
        if(s=="Thai")
            p+=75000;
        if(s=="Habanero")
            p+=125000;
    }cout<<p;
    return 0;
}

C.特殊事件 题目链接

依然非常简单,水题,废话不多说,上代码.

(此代码有些繁琐,请自行修改)

#include<bits/stdc++.h>
using namespace std;
int n,i,j,mx,ans[5];string s;
int main(){
    cin>>n;
    for(i=0;i<n;i++){
        cin>>s;
        for(j=0;j<5;mx=max(ans[j],mx),j++)
            if(s[j]=='Y')
                ans[j]++;
    }i=0;
    while(ans[i]!=mx&&i<5) i++;
    cout<<i+1;i++;
    for(;i<5;i++)
        if(ans[i]==mx)
            cout<<","<<i+1;
    return 0;
}

D.三角形 题目链接

看看洛谷题解给的解释吧,字幕君已崩溃

一看这题,两个相邻的黑色三角形,每个黑色的周长都要减去1,因此我们可以一个一个遍历。

那么如何判断相邻?很简单,同行邻列上的黑色三角形相邻,并且奇数列上的黑色三角形也相邻.

所以我们可以按照这个思路写代码.(以上摘抄自洛谷)

上程序!

#include<bits/stdc++.h>
using namespace std;
int n,i,j,a[5][200005],ans;
int main(){
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>a[1][i];
    for(i=1;i<=n;i++)
        cin>>a[2][i];
    for(i=1;i<=2;i++){
        for(j=1;j<=n;j++){
            if(a[i][j]){
                ans+=3;
                if(a[i][j-1])
                    ans-=2;
                if(a[i-1][j]&&j%2)
                    ans-=2;
            }
        }
    }cout<<ans;
    return 0;
}

E.单词查询 题目链接

这题其实和#300很像,但也有很不同的地方(导致我两次都把题审错了,做题目,审题是关键啊)

这明显一个深搜题目,那么,该怎么搜呢——

首先,我们要从网格中找到这个单词的首字母作为起点,

再审审题,起点周边八个方向都搜一圈,看看有没有这个单词第二个字母(这之间有细节,见程序).

如果有,就以此方向为搜索方向,一直搜到底(终止条件和搜索条件见后文).

但再审审题,

另一种方式是单词的字母出现在一个线段上,直到某个字母,然后出现在第二行在这个字母处形成直角的线段。

中途这个方向是可以转一次的(只限90°),那么就要多写一种情况.

该怎么转呢,简单,要么向左转,要么向右转.

例如用0表示左下,1表示左上,2表示右下,3表示右上
     4表示上,5表示下,6表示左,7表示右.
八种方向的转法如下图表示
0->(1,2) 1->(0,3) 2->(0,3) 3->(1,2)
4->(6,7) 5->(6,7) 6->(4,5) 7->(4,5)

这样解决了转的问题,有的同学要问了:

搜索的终止条件和进行条件是什么?

别急,先假设你前面已经搜了l次

进行条件,

就是坐标不出界,下一个要搜的位置上的字母是单词的第l+1个字母.

终止条件

就是搜完了整个单词,即l=单词长度-1.

综上所述,如果还不懂,看看代码吧.(严禁抄袭!)

#include<bits/stdc++.h>
using namespace std;
char s[105],c[105][105];
int n,m,ans,dx[8]={1,1,-1,-1,1,-1,0,0},dy[8]={-1,1,-1,1,0,0,1,-1};
void dfs(int x,int y,int l,int fx,int f){
    if(l==strlen(s)-1){
        ans++;
        return;
    }        
    int ux=x+dx[fx],uy=y+dy[fx];
    if(ux>=0&&ux<n&&uy>=0&&uy<m&&c[ux][uy]==s[l+1])
        dfs(ux,uy,l+1,fx,f);
    if(f==0){
        int tf1,tf2;
        if(fx==0||fx==3)
            tf1=1,tf2=2;
        if(fx==1||fx==2)
            tf1=0,tf2=3;
        if(fx==4||fx==5)
            tf1=6,tf2=7;
        if(fx==6||fx==7)
            tf1=4,tf2=5;
        ux=x+dx[tf1],uy=y+dy[tf1];
        if(ux>=0&&ux<n&&uy>=0&&uy<m&&c[ux][uy]==s[l+1])
            dfs(ux,uy,l+1,tf1,1);
        ux=x+dx[tf2],uy=y+dy[tf2];
        if(ux>=0&&ux<n&&uy>=0&&uy<m&&c[ux][uy]==s[l+1])
            dfs(ux,uy,l+1,tf2,1);                
    }
}
int main(){
    cin>>s>>n>>m;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            cin>>c[i][j];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(c[i][j]==s[0]){
                if(strlen(s)==1)
                    ans++;
                else
                    for(int k=0;k<8;k++)
                        if(c[i+dx[k]][j+dy[k]]==s[1])
                            dfs(i+dx[k],j+dy[k],1,k,0);                                
            }
    cout<<ans;
    return 0;
}

请问比赛题目为什么没有数据范围?

2023-05-06 18:39:37 By xushuoxin

kunkun: 我要抗议!

@zuotingting,@muyi,@乙鸟

神奇

2023-05-05 19:47:04 By xushuoxin
#498
#include<bits/stdc++.h>
using namespace std;
int a,b,c,flag,f[10];
int check(int s){return !f[s%10]++&&!f[s%100/10]++&&!f[s/100]++;}
int add(int s){return s%10+s%100/10+s/100;}
int mul(int s){return (s%10)*(s%100/10)*(s/100);}
int main(){
    cin>>a>>b>>c;
    if(!a||!b||!c){
        cout<<"No!!!";
        return 0;
    }
    for(int i=100;i<=999;i++){
        memset(f,0,sizeof(f));
        if(check(i)&&check(i*b/a)&&add(i)+add(i*b/a)+add(i*c/a)==45&&mul(i)*mul(i*b/a)*mul(i*c/a)==362880){
            cout<<i<<" "<<i*b/a<<" "<<i*c/a<<endl;
            flag=1;
        }
    }
    if(!flag)
        cout<<"No!!!";
    return 0;
}

为啥第5个数据过不去?明明C++上运行的正确,洛谷后来看也是100分.

共 50 篇博客