博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【NOIP2007】提高组
阅读量:5216 次
发布时间:2019-06-14

本文共 5878 字,大约阅读时间需要 19 分钟。

T1统计数字

排个序扫一遍就没了吧......

 

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 int a[200005]; 7 int read() 8 { 9 char c=getchar();int ans=0,f=1;10 while(c<'0'||c>'9'){
if(c=='-')f=-1;c=getchar();}11 while(c>='0'&&c<='9'){ans=ans*10+c-48;c=getchar();}12 return ans*f;13 }14 int main()15 {16 int n=read(),m=0;17 for(int i=1;i<=n;i++)a[i]=read();18 sort(a+1,a+1+n);19 for(int i=1;i<=n;i++)20 {21 if(a[i]==a[i+1])m++;22 else23 {24 printf("%d %d\n",a[i],m+1);25 m=0;26 }27 }28 return 0;29 }
T1

 

T2字符串的展开

超级大分类的模拟题,没什么好讲的......

 

1 #include
2 #include
3 #include
4 const int N=1e5+10; 5 using namespace std; 6 char c[N]; 7 int p1,p2,p3; 8 int main() 9 {10 scanf("%d %d %d",&p1,&p2,&p3);11 scanf("%s",c+1);12 int len=strlen(c+1);13 for(int i=1;i<=len;i++){14 if(c[i]!='-'){15 printf("%c",c[i]);continue;16 }17 if(i==1){printf("-");continue;}18 if(c[i+1]=='-'||c[i-1]=='-'){printf("-");continue;}19 if(c[i+1]<=c[i-1]||(c[i+1]>='a'&&c[i-1]<='9')){printf("-");continue;}20 if(c[i+1]==c[i-1]+1)continue;21 if(p1==3){22 for(int j=1;j<=p2*(c[i+1]-c[i-1]-1);j++)printf("*");23 continue;24 }25 if(p3==1){26 if(p1==1||(c[i-1]>='0'&&c[i-1]<='9')){27 for(int j=c[i-1]+1;j<=c[i+1]-1;j++){28 for(int k=1;k<=p2;k++)printf("%c",j);29 }30 }31 else{32 for(int j=c[i-1]+1;j<=c[i+1]-1;j++){33 for(int k=1;k<=p2;k++)printf("%c",j-('a'-'A'));34 }35 }36 }37 else{38 if(p1==1||(c[i-1]>='0'&&c[i-1]<='9')){39 for(int j=c[i+1]-1;j>=c[i-1]+1;j--){40 for(int k=1;k<=p2;k++)printf("%c",j);41 }42 }43 else{44 for(int j=c[i+1]-1;j>=c[i-1]+1;j--){45 for(int k=1;k<=p2;k++)printf("%c",j-('a'-'A'));46 }47 }48 }49 }50 return 0;51 }
T2

 

T3树网的核

n3跑一遍floyd预处理出两两之间最短路,n2枚举两个在直径上的点统计答案就好了。

1 #include
2 #include
3 #include
4 const int inf=0x3f3f3f3f; 5 using namespace std; 6 int n,s,a,b,c,maxx=0,mxi,mxj; 7 int dis[305][305]; 8 int read() 9 {10 int ans=0,f=1;char c=getchar();11 while(c<'0'||c>'9'){
if(c=='-')f=-1;c=getchar();}12 while(c>='0'&&c<='9'){ans=ans*10+c-48;c=getchar();}13 return ans*f;14 } 15 int main()16 {17 n=read();s=read();18 for(int i=1;i<=n;i++)19 for(int j=1;j<=n;j++)20 if(i!=j)dis[i][j]=inf;21 for(int i=1;i<=n-1;i++){22 a=read();b=read();c=read();dis[a][b]=dis[b][a]=c;23 }24 for(int k=1;k<=n;k++)25 for(int i=1;i<=n;i++)26 for(int j=1;j<=n;j++){27 if(dis[i][k]>=inf||dis[k][j]>=inf)continue;28 dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);29 if(dis[i][j]>maxx){30 maxx=dis[i][j];31 mxi=i;mxj=j;32 }33 }34 int ans=inf;35 for(int i=1;i<=n;i++){36 if(dis[mxi][i]+dis[i][mxj]!=dis[mxi][mxj])continue;37 for(int j=1;j<=n;j++){38 if(dis[mxi][j]+dis[j][mxj]!=dis[mxi][mxj]||dis[i][j]>s)continue;39 int ecc=0;40 ecc=max(min(dis[mxi][i],dis[mxi][j]),min(dis[mxj][i],dis[mxj][j]));41 ans=min(ans,ecc);42 }43 }44 printf("%d",ans);45 return 0;46 }
T3

T4矩阵取数游戏

这题要是没有高精就是一道简单dp了,不过加上高精乘之后就很不好写了。然而我们可以把状态转移方程化为:

f[i][j]=2*max(f[i+1][j]+mp[i]+mp[i][j],f[i][j-1]+mp[j]);

这样我们就只用写两个高精加就行了(然而还是很不好写)......

1 #include
2 #include
3 #include
4 #define mem(a,p) memset(a,p,sizeof(a)) 5 #include
6 const int N=85; 7 int n,m; 8 int read(){ 9 int ans=0,f=1;char c=getchar();10 while(c<'0'||c>'9'){
if(c=='-')f=-1;c=getchar();}11 while(c>='0'&&c<='9'){ans=ans*10+c-48;c=getchar();}12 return ans*f;13 }14 int f[N][N][100],data[N][N],ans[100],kk[100],pp[100],dd[100];15 int mxa(int x,int y){
return x>y?x:y;}16 void plus0(int x[],int y[]){17 x[0]=mxa(x[0],y[0]);18 for(int i=1;i<=x[0];i++){19 x[i]+=y[i];20 x[i+1]+=x[i]/10;21 x[i]%=10;22 }23 if(x[x[0]+1]>0)x[0]++;24 }25 void max(int x[],int y[],int z[]){26 if(y[0]>z[0]){plus0(x,y);return;}27 if(z[0]>y[0]){plus0(x,z);return;}28 for(int i=y[0];i>=1;i--){29 if(y[i]>z[i]){plus0(x,y);return;}30 if(y[i]
0)x[0]++;42 }43 int main(){44 n=read();m=read();45 for(int i=1;i<=n;i++)46 for(int j=1;j<=m;j++)47 data[i][j]=read();48 for(int r=1;r<=n;r++){49 mem(f,0);50 for(int i=m;i>=1;i--){51 for(int j=i;j<=m;j++){52 mem(kk,0);mem(pp,0);53 plus1(kk,data[r][j],f[i][j-1]);54 for(int k=0;k<=kk[0];k++)pp[k]=kk[k];55 plus0(kk,pp);mem(dd,0);mem(pp,0);56 plus1(pp,data[r][i],f[i+1][j]);57 for(int k=0;k<=pp[0];k++)dd[k]=pp[k];58 plus0(pp,dd);59 max(f[i][j],pp,kk);60 }61 }62 plus0(ans,f[1][m]);63 }64 if(ans[0]==0)return printf("0"),0;65 for(int i=ans[0];i>=1;i--)printf("%d",ans[i]);66 return 0;67 }
T4

 

转载于:https://www.cnblogs.com/JKAI/p/7788304.html

你可能感兴趣的文章
minggw 安装
查看>>
Jquery操作cookie,实现简单的记住用户名的操作
查看>>
[BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树
查看>>
PHP基础入门(二)
查看>>
[Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)
查看>>
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
18款在线代码片段测试工具
查看>>
20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析
查看>>
静态变量数组实现LRU算法
查看>>
在SQL中怎么把一列字符串拆分为多列
查看>>
中文系统 上传file的input显示英文
查看>>
css样式写一个三角形
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>
javascript获取textarea中所选文本的开始位置、结束位置和选择的文本
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
事务备份还原分离附加
查看>>
JSch - Java实现的SFTP(文件上传详解篇)
查看>>
一些注意点
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>