啊啊啊啊!!!!!我!太!兴!奋!了!考前的所有模拟中第一次上400!!!(也可能是这一次的csp题目比较简单)但对我来说!还是史诗性的进步!!!!这对后天即将要考csp的我是很大的鼓舞!!!!下面是我这次模拟的题目以及代码,先放上去留个纪念!!!虽然还有很多可以优化和拿分的空间,但考试总会有遗憾,已经很满意了呜呜呜~最后dby加油!!!你下次csp一定可以的!!!!
代码如下:
#include <iostream>
using namespace std;
int a[1010];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
if(i==1) cout<<(a[1]+a[2])/2<<" ";
else if(i==n) cout<<(a[n-1]+a[n])/2<<" ";
else cout<<(a[i-1]+a[i]+a[i+1])/3<<" ";
}
return 0;
}
代码如下:
#include <iostream>
using namespace std;
const int N=1e6+10;
int a[N],b[N];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int l,r;
cin>>l>>r;
fill(a+l,a+r,1);
}
for(int i=1;i<=n;i++)
{
int l,r;
cin>>l>>r;
fill(b+l,b+r,1);
}
int ans=0;
for(int i=1;i<=1e6;i++)
if(a[i]&&b[i]) ans++;
cout<<ans;
return 0;
}
代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N=110;
struct node{
vector<int>child;
string di,id;
}a[N];
int st[N];
int n,m,cnt;
vector<int> ans;
string s[N],s1[N];
string qu,qu1[N];
int kin[N];
void dfs(int fa,int u,int num)
{
if(u==n+1) return;
for(int i=u;i<=n;i++)
{
if(st[i]) continue;
int nu=0;
for(int j=0;j<s[u].size();j+=2)
{
if(s[i][j]=='.')nu++;
else break;
}
if(nu==num)
{
st[i]=1;
if(fa>=1) a[fa].child.push_back(i);
a[i].di=s[i].substr(nu*2);
a[i].id=s1[i];
dfs(i,i+1,nu+1);
}
else if(nu>num) dfs(u,i,nu);
else return;
}
}
void dfs1(int u,int flag)
{
for(int i=0;i<a[u].child.size();i++)
{
int v=a[u].child[i];
if(flag<cnt-1)
{
if((kin[flag]==1&&a[v].id==qu1[flag])||(kin[flag]==2&&a[v].di==qu1[flag])) dfs1(v,flag+1);
else dfs1(v,flag);
}
else
{
if((kin[flag]==1&&a[v].id==qu1[flag])||(kin[flag]==2&&a[v].di==qu1[flag])) ans.push_back(v);
dfs1(v,flag);
}
}
}
void func1()
{
for(int i=0;i<qu.size();i++)
{
if(qu[i]>='a') qu[i]=qu[i]-32;
}
for(int i=1;i<=n;i++)
{
if(a[i].di==qu)
{
ans.push_back(i);
}
}
cout<<ans.size()<<" ";
for(int i=0;i<ans.size();i++) cout<<ans[i]<<" ";
cout<<endl;
ans.clear();
}
void func2()
{
qu=qu.substr(1);
for(int i=1;i<=n;i++)
{
if(a[i].id==qu) ans.push_back(i);
}
cout<<ans.size()<<" ";
for(int i=0;i<ans.size();i++) cout<<ans[i]<<" ";
cout<<endl;
ans.clear();
}
void func3()
{
for(int i=0;i<cnt;i++)
{
if(qu1[i][0]=='#')
{
qu1[i]=qu1[i].substr(1);
kin[i]=1;
}
else
{
for(int j=0;j<qu1[i].size();j++)
{
if(qu1[i][j]>='a') qu1[i][j]=qu1[i][j]-32;
}
kin[i]=2;
}
}
if(kin[0]==1)
{
if(a[1].id==qu1[0]) dfs1(1,1);
else dfs1(1,0);
}
else
{
if(a[1].di==qu1[0]) dfs1(1,1);
else dfs1(1,0);
}
cout<<ans.size()<<" ";
for(int i=0;i<ans.size();i++) cout<<ans[i]<<" ";
cout<<endl;
ans.clear();
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>s[i];
for(int j=0;j<=s[i].size();j++)//49 17
{
if(s[i][j]>='a') s[i][j]=s[i][j]-32;
}
if(cin.get()!='\n')
{
string ss;
cin>>ss;
s1[i]=ss.substr(1);
}
}
dfs(-1,1,0);
//cout<<a[1].di<<endl;
while(m--)
{
cin>>qu;
if(cin.get()!='\n')
{
cnt=1;
while(cin>>qu1[cnt++])
{
if(cin.get()=='\n') break;
}
qu1[0]=qu;
func3();
continue;
}
if(qu[0]=='#')func2();
else func1();
}
return 0;
}
代码如下:
#include <iostream>
using namespace std;
int a[310],b[310];
int n;
bool dfs(int u)
{
if(u==n)
{
for(int i=max((a[n]*2-b[u-1]),1);(i+b[u-1])/2<=a[n];i++)
{
b[u]=i;
if((b[u-2]+b[u-1]+i)/3==a[u-1])
return true;
}
return false;
}
if(u==1)
{
for(int i=1;i/2<a[1]&&(i+2)/3<=a[2];i++)
{
b[u]=i;
if(dfs(u+1)) return true;
}
}
else if(u==2)
{
for(int i=max(a[1]*2-b[1],1);(b[u-1]+i+1)/3<=a[u]&&(i+2)/3<=a[3];i++)
{
if(((i+b[1])/2==a[1]))
{
b[u]=i;
if(dfs(u+1)) return true;
}
}
}
else if(u==n-1)
{
for(int i=max(a[u-1]*3-b[u-1]-b[u-2],1);(b[u-1]+i+1)/3<=a[u]&&(i+1)/2<=a[u+1];i++)
{
if(((i+b[u-1]+b[u-2])/3==a[u-1]))
{
b[u]=i;
if(dfs(u+1)) return true;
}
}
}
else
{
for(int i=max(a[u-1]*3-b[u-1]-b[u-2],1);(b[u-1]+i+1)/3<=a[u]&&(i+2)/3<=a[u+1];i++)
{
if(((i+b[u-1]+b[u-2])/3==a[u-1]))
{
b[u]=i;
if(dfs(u+1)) return true;
}
}
}
return false;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
if(n<=2)
{
cout<<"1 "<<(a[1]*2)-1;
return 0;
}
dfs(1);
for(int i=1;i<=n;i++) cout<<b[i]<<" ";
return 0;
}
emmm这个只有20分,还有优化的空间,可是模拟的时间不够了~~~日后会再来看的!!
代码如下:
#include <iostream>
#define ll long long
using namespace std;
const int mod=998244353;
const int M=1e5+10;
ll k[M],b[M];
ll l,r;
int m;
int main()
{
cin>>m>>l>>r;
for(int i=1;i<=m;i++) cin>>k[i];
b[0]=1;
for(int i=1;i<=r;i++)
{
ll ans=0;
for(int j=1;j<=min(i,m);j++)
{
ans=(ans+(k[j]*b[i-j]%mod))%mod;
}
b[i]=ans;
}
for(int i=l;i<=r;i++)cout<<b[i]<<endl;
return 0;
}