讨论 / NOIP2005普及组的一个题
沧海一声喵 2018-02-03 23:39:29
点我顶贴 收藏 删除
几乎是NOIP2005普及组原题,就是输出格式啥的改了一下
#1 青丘杨哲@2018-04-28 18:01:31
回复 删除
NOIP2005普及组是真的水啊,凡是正经来参加比赛的300分都不成问题吧,那省一线该有多高啊!
#2 LisaXu@2018-04-29 02:10:44
回复 删除
有木有哪位大侠,可以发一下C++的答案呀!O(∩_∩)O~~

#3 LisaXu@2018-04-29 02:10:52
回复 删除
谢谢
#4 2017beijiang99@2018-04-30 01:19:05
回复 删除
1:

#include<iostream>

using namespace std;

int main()

{

int n=10;

int a[11];

int t,o;

int i,j,k,c=0;

for(i=0;i<n;i++)

cin>>a[i];

cin>>t;

o=t+30;

for(i=0;i<n;i++)

{

if(o>=a[i])

c=c+1;

}

cout<<c<<endl;

return 0;

}

#5 2017beijiang99@2018-04-30 01:19:51
回复 删除
2:

#include<iostream>

#include<cstdio>

using namespace std;

int t[10010],b[101],e[101],L,M,i,j,s=0;

int main()

{

cin>>L>>M;

for(i=0;i<=L;i++)

t[i]=1;

for(i=0;i<M;i++)

{

cin>>b[i]>>e[i];

}

for(i=0;i<M;i++)

{

for(j=b[i];j<=e[i];j++)

t[j]=0;

}

for(i=0;i<=L;i++)

{

if(t[i]==1)

s++;

}

cout<<s<<endl;

return 0;

}

#6 2017beijiang99@2018-04-30 01:20:23
回复 删除
3:

#include<cstdio>

#include<algorithm>

#include<cstdlib>

#include<cstring>

using namespace std;

const int maxn=100;

int n,a[maxn+10],b[maxn+10];

int c[2][maxn+10],ans[maxn+10];

char s[maxn+10];

bool same(int p[],int q[],int x)

{

for(int i=1;i<=x;i++)if(p[i]!=q[i])return 0;

return 1;

}

void multi_1(int x)

{

int i,last=0;

for(i=1;i<=ans[0];i++)

{

ans[i]=ans[i]*x+last;

last=ans[i]/10,ans[i]%=10;

}

if(last>0)ans[++ans[0]]=last;

}

void multi_2(int w[],int p[],int q[])

{

int i,k,last=0;

w[0]=min(p[0]+q[0]-1,n);

for(k=1;k<=w[0];k++)

{

for(w[k]=last,i=1;i<=p[0];i++)

if(k+1-i>=1 && k+1-i<=q[0])w[k]+=p[i]*q[k+1-i];

last=w[k]/10,w[k]%=10;

}

if(last)w[++w[0]]=last;

}

int get(int x)

{

memcpy(c[0],b,sizeof(b));

for(int i=1;i<=10;i++)

{

multi_2(c[i%2],c[(i+1)%2],b);

if(same(c[i%2],b,x))

{

multi_2(c[i%2],c[(i-1)%2],a);

if(!same(c[i%2],a,x))goto d1;

memcpy(b,c[(i-1)%2],sizeof(c[0]));

return i;

}

}

d1:printf("-1\n");

exit(0);

}

int main()

{

int i;

scanf("%s%d",s,&n);

a[0]=strlen(s),n=min(a[0],n);

for(i=1;i<=n;i++)a[i]=s[a[0]-i]-'0';

memcpy(b,a,sizeof(a)),ans[0]=1,ans[1]=1;

for(i=1;i<=n;i++)multi_1(get(i));

for(i=ans[0];i>=1;i--)printf("%d",ans[i]);

return 0;

}

#7 2017beijiang99@2018-04-30 01:21:11
回复 删除
4:

#include<cstdio>

#include<cstring>

int f[10000],w[10000],v[10000];

int max(int x,int y)

{

if(x>y)

return x;

else

return y;

}

int main()

{

int t,m,i,j;

memset(f,0,sizeof(f));

scanf("%d %d",&t,&m);

for(i=1;i<=m;i++)

{

scanf("%d %d",&w[i],&v[i]);

}

for(i=1;i<=m;i++)

{

for(j=t;j>=w[i];j--)

{

if(w[i]<=t)

f[j]=max(f[j-w[i]]+v[i],f[j]);

}

}

printf("%d\n",f[t]);

return 0;

}

#8 2017beijiang99@2018-04-30 01:22:17
回复 删除
NOIP2005普及组
#9 青丘杨哲@2018-05-03 04:52:15
回复 删除
回复 #8 2017beijiang99:我发现我和你写的代码风格似乎很像啊!
#10 青丘杨哲@2018-05-03 18:26:29
回复 删除
我也来一发
查看更多回复
提交回复