引进一下从洛谷上搞来的科技,另外问个东西
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 篇博客