我的第一次CSP认证,期望考到200分。
题目一年比一年难…之前往年的题目也就做了前两题,没有认真研究后面三个题,太浮躁了。
2019-12-15 青岛大学
前两个水题切了一个小时,之前的最多40分钟,把题目理解清楚就ok了。
第三题判断化学方程式是否配平(包括系数、化学元素(大小写)、括号、嵌套括号),读题的时候想的太少,没考虑清楚,导致最后写了2个半小时才发现没想全…再给我1小时差不多可以过6组样例的,下次再做大模拟的想明白了再下手,在纸上要写明白,要不写的时候容易掉了条件,我太难了…
第四题区块链,没看懂,过后补题,没做。
第五题,区间操作,暴力做的,longlong开的无符号整型。
2019-12-17
出分了 … 240 (前7.1%),差不多跟预想的一样
1:100
2:100
3:30
4:0
5:10
明年3月份继续吧,这次做题有点浮躁,沉不下心来,还是菜啊…
考一次有点贵,400块钱(包括路费)…学校好像对这个不重视,没法报销。
附上比赛的代码:
1.报数(100分)
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
typedef long long ll;
const int maxn=1e6+10;
using namespace std;
ll a[maxn];
ll judge(int n)
{
if(n%7==0)
return 1;
ll num=log10(n)+1;
ll ans=n;
for(int i=1;i<=num;i++)
{
if(ans%10==7)
return 1;
ans/=10;
}
return 0;
}
void init()
{
ll k=1;
for(int i=1;i<=10000;i++)
{
if(judge(i)==0)
a[k++]=i;
}
}
int main()
{
ll n;
ll a1=0,a2=0,a3=0,a4=0;
cin>>n;
init();
ll num=a[n];
for(int i=1;i<=num;i+=4)//1
{
if(judge(i)==1)
a1++;
}
for(int i=2;i<=num;i+=4)//2
{
if(judge(i)==1)
a2++;
}
for(int i=3;i<=num;i+=4)//3
{
if(judge(i)==1)
a3++;
}
for(int i=4;i<=num;i+=4)//4
{
if(judge(i)==1)
a4++;
}
cout<<a1<<endl<<a2<<endl<<a3<<endl<<a4<<endl;
return 0;
}
2.回收站选址 (100分)
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
typedef long long ll;
const int maxn=1e6+10;
using namespace std;
struct node{
ll x,y;
}eg[maxn];
ll a[10];
int main()
{
ll u,d,l,r,num;
ll n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>eg[i].x>>eg[i].y;
}
for(int i=1;i<=n;i++)
{
u=0,d=0,l=0,r=0;
num=0;
ll x=eg[i].x;
ll y=eg[i].y;
for(int j=1;j<=n;j++)
{
if(eg[j].x==x&&eg[j].y==y+1)
u=1;
else if(eg[j].x==x&&eg[j].y==y-1)
d=1;
else if(eg[j].x==x-1&&eg[j].y==y)
l=1;
else if(eg[j].x==x+1&&eg[j].y==y)
r=1;
}
if(u==1&&d==1&&l==1&&r==1)
{
for(int j=1;j<=n;j++)
{
if(eg[j].x==x-1&&eg[j].y==y+1)
num++;
else if(eg[j].x==x-1&&eg[j].y==y-1)
num++;
else if(eg[j].x==x+1&&eg[j].y==y+1)
num++;
else if(eg[j].x==x+1&&eg[j].y==y-1)
num++;
}
a[num]++;
}
}
for(int i=0;i<=4;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
3.化学方程式 (30分)
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
typedef long long ll;
const int maxn=1e6+10;
using namespace std;
ll pre[1000],hre[1000];
ll s[1000],h[1000];
void init()
{
for(int i=0;i<1000;i++)
{
pre[i]=0;
hre[i]=0;
s[i]=0;
h[i]=0;
}
}
int main()
{
ll n,k;
cin>>n;
string str;
for(int i=1;i<=n;i++)
{
init();
ll flag=0;
cin>>str;
for(int j=0;j<str.length();j++)
{
if(str[j]=='=')
k=j;
}
//cout<<"k "<<endl;
ll o1=0;
for(int i=0;i<k;i++)
{
if(str[i]=='+')
s[o1++]=i;
}
// cout<<"o1 "<<o1<<endl;
ll o2=0;
for(int i=k+1;i<str.length();i++)
{
if(str[i]=='+')
h[o2++]=i;
}
ll qq;
if(s[0]==0)
qq=k;
else
qq=s[0];
ll f1=0;//第一部分
if(str[0]>='0'&&str[0]<='9')
f1=1;
if(f1)
{
ll mm;
ll num=str[0]-'0';
for(int i=1;i<qq;i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
}
pre[str[i]-'A']+=num*mm;
}
}
else
{
ll mm;
for(int i=0;i<qq;i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
//cout<<mm<<endl;
}
//cout<<str[i]<<endl;
pre[str[i]-'A']+=mm;
}
}
for(int i=0;i<o1-1;i++)//中间
{
ll l=s[i]+1,r=s[i+1];
ll f=0;
if(str[l]>='0'&&str[l]<='9')
f=1;
if(f)
{
ll mm;
ll num=str[l]-'0';
for(int i=l+1;i<r;i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
}
pre[str[i]-'A']+=num*mm;
}
}
else
{
ll mm;
for(int i=l;i<r;i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
}
pre[str[i]-'A']+=mm;
}
}
}
if(s[0])
{
f1=0;//后面
if(str[s[o1-1]+1]>='0'&&str[s[o1-1]+1]<='9')
f1=1;
if(f1)
{
ll mm;
ll num=str[s[o1-1]+1]-'0';
for(int i=s[o1-1]+2;i<k;i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
}
pre[str[i]-'A']+=num*mm;
}
}
else
{
ll mm;
for(int i=s[o1-1]+1;i<k;i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
}
pre[str[i]-'A']+=mm;
}
}
}
//==HOU
ll pp;
if(h[0]==0)
pp=str.length();
else
pp=h[0];
f1=0;//第一部分
if(str[k+1]>='0'&&str[k+1]<='9')
f1=1;
if(f1)
{
ll mm;
ll num=str[k+1]-'0';
for(int i=k+2;i<pp;i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
}
hre[str[i]-'A']+=num*mm;
}
}
else
{
ll mm;
for(int i=k+1;i<pp;i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
}
hre[str[i]-'A']+=mm;
}
}
for(int i=0;i<o2-1;i++)//中间
{
ll l=h[i]+1,r=h[i+1];
ll f=0;
if(str[l]>='0'&&str[l]<='9')
f=1;
if(f)
{
ll mm;
ll num=str[l]-'0';
for(int i=l+1;i<r;i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
}
hre[str[i]-'A']+=num*mm;
}
}
else
{
ll mm;
for(int i=l;i<r;i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
}
hre[str[i]-'A']+=mm;
}
}
}
if(h[0])
{
f1=0;//后面
if(str[h[o2-1]+1]>='0'&&str[h[o2-1]+1]<='9')
f1=1;
if(f1)
{
ll mm;
ll num=str[h[o2-1]+1]-'0';
for(int i=h[o2-1]+2;i<str.length();i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
}
hre[str[i]-'A']+=num*mm;
}
}
else
{
ll mm;
for(int i=h[o2-1]+1;i<str.length();i++)
{
mm=1;
if(str[i]>='0'&&str[i]<='9')
continue;
if(str[i+1]>='0'&&str[i+1]<='9')
{
mm=str[i+1]-'0';
}
hre[str[i]-'A']+=mm;
}
}
}
for(int i=0;i<500;i++)
{
if(pre[i]!=hre[i])
flag=1;
}
if(flag)
cout<<"N"<<endl;
else
cout<<"Y"<<endl;
}
return 0;
}
5.魔数 (10分)
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
typedef unsigned long long ll;
const int maxn=1e6+10;
using namespace std;
ll a[maxn];
ll u[10];
ll n;
const ll mod1=2009731336725594113;
const ll mod2=2019;
void init(ll n)
{
for(int i=1;i<=n;i++)
{
a[i]=i;
}
}
int main()
{
ll q;
u[0]=314882150829468584;
u[1]=427197303358170108;
u[2]=1022292690726729920;
u[3]=1698479428772363217;
u[4]=2006101093849356424;
cin>>n>>q;
init(n);
ll num;
ll l,r,t;
for(int i=1;i<=q;i++)
{
num=0;
cin>>l>>r;
for(int j=l;j<=r;j++)
{
num+=(a[j]%mod1)%mod2;
}
cout<<num<<endl;
t=num%5;
for(int j=l;j<=r;j++)
{
a[j]=((a[j]%mod1*u[t]%mod1)%mod1)%mod2;
}
}
return 0;
}