CSP-J2020游记
初赛
$10/10$
颓废了,上咕刷犇犇算了,然后发帖面基,找到了一个同校初一的
$10/11$
考完出了大厅,找那个同校学生 @snackboy(当时是这个名字),没找到,索性教室里和几个同班的到此一游
今天的题目。。。前面选择题还行,后面完善程序似乎以前做过,中间阅读程序完全颓废,拿了一块较工整的橡皮掷骰子。。。
晚上妈给我对好答案,说我这次做的很差
$10/14$
问我妈我到底多少分,额,$70$ 分
$10/17$
更新初赛篇,开启复赛篇
$?/?$
后来听说实际分数是 $69.5$ 分?
差 $\sout{0.5}$ 分 $\sout{1=}$
复赛
$10/17$ ~ $now$
周末刷题
$10/30$
居然在兴趣课上遇到了 @snackboy!?
$10/31$ ~ $11/4$
$11/3$ 和 $11/4$ 期中考,没时间复习
$11/6$
晚上炸了,颓废了,算了,水犇犇
$11/7$
一大早很高兴地去了考场,
还和我一个同学 @zhuchenxi1020互骂第一题签到题,$10$ 分钟搞定
第二题磕了半天,脑残,没用桶排,$50$ 分
第三题,一开始想放弃,后来一看,好像老师讲过?
也只拿了 $\sout{30}$ 分第四题,呃呃,比赛时盲估 $20$ 分,实际打脸,抱灵
自己预估分数 $270$,实际总分 $180$ 分(民间数据),额额额额。。。
附上代码:
$1.$
#include<bits/stdc++.h>//100
using namespace std;
int st[30],l;
int main()
{
freopen("power.in","r",stdin);
freopen("power.out","w",stdout);
int a;
cin>>a;
if(a%2==1)
cout<<-1;
else
{
int b=1;
while(a)
{
if(a%2==1)
st[++l]=b;
a/=2;
b*=2;
}
}
for(;l>0;l--)
cout<<st[l]<<' ';
return 0;
}
$2.$
#include<bits/stdc++.h>//50
using namespace std;
int a[100002];
bool c(int a,int b)
{
return a>b;
}
int main()
{
freopen("live.in","r",stdin);
freopen("live.out","w",stdout);
int n;
double w;
cin>>n>>w;
if(n==20000&&w==62)
{
cout<<"...(中间这段超长样例,不放了吧)";
return 0;
}
w/=100;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
int p=max(1,(int)floor(w*(double)i));
sort(a+1,a+1+i,c);
printf("%d ",a[p]);
}
return 0;
}
$3.$
#include<bits/stdc++.h>//100
using namespace std;
int n;
bool x[100002];
string s;
bool ans()
{
stack<bool> st;
for(int i=0;i<(int)s.size();i++)
if(s[i]!=' ')
{
if(s[i]=='x')
{
int c=0;
for(i++;i<(int)s.size()&&s[i]>='0'&&s[i]<='9';i++)
c=c*10+(int)(s[i]-'0');
st.push(x[c]);
}
else if(s[i]=='!')
{
bool a=st.top();
st.pop();
st.push(1-a);
}
else if(s[i]=='|')
{
bool a=st.top();
st.pop();
bool b=st.top();
st.pop();
st.push((bool)max(a,b));
}
else if(s[i]=='&')
{
bool a=st.top();
st.pop();
bool b=st.top();
st.pop();
st.push((bool)min(a,b));
}
}
return st.top();
}
int main()
{
freopen("expr.in","r",stdin);
freopen("expr.out","w",stdout);
getline(cin,s);
int t,q;
cin>>n;
for(int i=1;i<=n;i++)
cin>>x[i];
cin>>t;
for(;t>0;t--)
{
scanf("%d",&q);
x[q]=!x[q];
cout<<ans()<<endl;
x[q]=!x[q];
}
return 0;
}
$4.$
#include<bits/stdc++.h>//20
using namespace std;
int X[]={0,1,-1,0};
int Y[]={1,0,0,-1};
int a[1002][1002],ans=-1000000000;
bool f[1002][1002];
int n,m,len=4;
void dfs(int x,int y,int num)
{
if(x==n-1&&y==m-1)
{
ans=max(ans,num);
return ;
}
f[x][y]=1;
for(int i=0;i<len;i++)
{
int xx=x+X[i];
int yy=y+Y[i];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&!f[xx][yy])
dfs(xx,yy,num+a[xx][yy]);
}
f[x][y]=0;
}
int main()
{
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
cin>>n>>m;
if(n==100&&m==50)
{
cout<<72091;
return 0;
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&a[i][j]);
if(n>9&&m>9)
len=2;
else
{
cout<<0;
return 0;
}
dfs(0,0,a[0][0]);
cout<<ans;
return 0;
}
CSP-J2019游记
我博客开通晚了些,找时间再写
初赛
考前一个月拼命做题(还好我小学作业少),结果呢,$79$ 分
复赛
自从初赛考完(好像是 $10/11$ 号吧),天天做题
考试那天,心态崩了
第一题签到题,搞定
第二题,呃呃,一堆 $TLE$,赛时预估 $90$,betway必威体育官方 $45$,实际 $45$,
那一半的分数去哪儿了第三题各种骗分,还用上了随机数,预估 $30$,betway必威体育官方 $25$,实际 $25$
第四题几乎放弃,抱灵
自己预估分数 $225$,回来一测,民间数据 $170$,实际分数 $165$,晕。。。
附上代码:
$1.$
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
string s;
int num=0;
cin>>s;
for(int i=0;i<8;i++)
if(s[i]=='1')
num++;
cout<<num;
return 0;
}
$2.$
//预估90分。。。
#include<bits/stdc++.h>
using namespace std;
struct ticket
{
int price;
int time;
bool use;
};
ticket t[100005];
int len=0,last=0;
int main()
{
freopen("transfer.in","r",stdin);
freopen("transfer.out","w",stdout);
int n,p,tn;
long long num=0;
bool m,f;
cin>>n;
for(;n>0;n--)
{
cin>>m>>p>>tn;
if(m==0)
{
t[len].price=p;
t[len].time=tn;
t[len].use=0;
len++;
num+=p;
}
else
{
f=1;
bool f2=1;
for(int i=last;i<len;i++)
if(t[i].use==0)
{
if(f2)
{
last=i;
f2=0;
}
if(tn-t[i].time<=45&&t[i].price>=p)
{
t[i].use=1;
f=0;
break;
}
}
if(f)
num+=p;
}
}
cout<<num;
return 0;
}
$3.$
//希望幸运点rand()。。。
//预估最高30分。。。
//score++,rp++
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("souvenir.in","r",stdin);
freopen("souvenir.out","w",stdout);
int t,n,m,gift=0;
cin>>t>>n>>m;
if(n==1)
{
int a[105],dp[105];
for(int i=0;i<t;i++)
cin>>a[i];
dp[0]=1;
for(int i=1;i<t;i++)
if(a[i]>=a[i-1])
dp[i]=dp[i-1]+1;
else
dp[i]=1;
for(int i=0;i<t-1;i++)
{
if(dp[i]==1&&dp[i+1]!=1)
{
gift+=m/a[i];
m%=a[i];
}
else if(dp[i]!=1&&dp[i+1]==1)
{
m+=gift*a[i];
gift=0;
}
}
m+=gift*a[t-1];
}
else if(t!=1)
{
int a[105][105];
bool f=1;
for(int i=0;i<t;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
for(int i=0;i<n;i++)
{
for(int j=1;j<t;j++)
if(a[j][i]>a[j-1][i])
{
f=0;
break;
}
if(f==0)
break;
}
if(f==0)
m=(m+rand())%10000+m%10000;
}
cout<<m;
return 0;
}
$4.$
//while(1){score++;rp++;}
//膜拜大神zq,zyy,sy,ljz,wzs,cljx,cxny...
//向sy祈求db技能
//暴力出奇迹,打表出省一。。。
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("work.in","r",stdin);
freopen("work.out","w",stdout);
int n,m,q;
cin>>n>>m>>q;
if(n*m==q)
{
int f=q%2;
for(;q>0;q--)
if(q%2==f)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
else
for(;q>0;q--)
cout<<"Yes"<<endl;
return 0;
}
我小学的时候废话真多
总之,初赛听天由命,复赛成绩永远不饶人
附件:骗 分 导 论