NOIP模拟9.12
来源:互联网 发布:中转国际机票 知乎 编辑:程序博客网 时间:2024/06/06 20:27
NOIP2000提高组。
都写过还一堆错,蒟蒻。
A.进制转换,没考虑0。90分。
B.乘积最大。因为写高精乘时没有判0.90分。
C.单词接龙。以为最会T掉的题,结果A了。
D.方格取数。应该从0开始循环,而非1,丢掉50分。
A
#include <bits/stdc++.h>using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int n,k,ans[105];char id[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'};int main(){//-3/-2=1...-1,3/-2=-1...1// freopen("a.in","r",stdin); n=read();k=read();int x=n; while(x){ int a=x/k,b=x-a*k; if(b<0) b-=k,a+=1; ans[++ans[0]]=b;x=a; }printf("%d=",n); if(!ans[0]) printf("0"); for(int i=ans[0];i>=1;--i) putchar(id[ans[i]]); printf("(base%d)",k); return 0;}
B
#include <bits/stdc++.h>using namespace std;#define N 60#define ll long longinline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int n,kk;char s[N];struct bigint{ int a[N],n; bigint(){memset(a,0,sizeof(a));n=0;} friend bigint operator*(bigint a,bigint b){ bigint res;if(!a.n||!b.n) return res;//注意和0相乘要特判 res.n=a.n+b.n-1; for(int i=1;i<=a.n;++i) for(int j=1;j<=b.n;++j) res.a[i+j-1]+=a.a[i]*b.a[j]; for(int i=1;i<=res.n;++i) res.a[i+1]+=res.a[i]/10,res.a[i]%=10; while(res.a[res.n+1]) res.n++,res.a[res.n+1]+=res.a[res.n]/10,res.a[res.n]%=10; return res; } friend bool operator<(bigint a,bigint b){ if(a.n<b.n) return 1; if(a.n>b.n) return 0; for(int i=a.n;i>=1;--i){ if(a.a[i]<b.a[i]) return 1; if(a.a[i]>b.a[i]) return 0; }return 0; }};void solve1(){ ll a[N][N];memset(a,0,sizeof(a)); ll dp[N][10];memset(dp,0,sizeof(dp)); for(int i=1;i<=n;++i) for(int j=i;j<=n;++j) a[i][j]=a[i][j-1]*10+s[j]-'0'; for(int i=1;i<=n;++i) dp[i][0]=a[1][i]; for(int k=1;k<=kk;++k) for(int i=k+1;i<=n;++i) for(int j=k;j<i;++j) dp[i][k]=max(dp[i][k],dp[j][k-1]*a[j+1][i]); printf("%lld\n",dp[n][kk]);}void solve2(){ bigint a[N][N];bigint dp[N][10]; for(int i=1;i<=n;++i) for(int j=i;j<=n;++j){ for(int k=1;k<=j-i+1;++k) a[i][j].a[k]=s[j-k+1]-'0'; a[i][j].n=j-i+1;while(a[i][j].n>0&&!a[i][j].a[a[i][j].n]) a[i][j].n--; } for(int i=1;i<=n;++i) dp[i][0]=a[1][i]; for(int k=1;k<=kk;++k) for(int i=k+1;i<=n;++i) for(int j=k;j<i;++j) if(dp[i][k]<dp[j][k-1]*a[j+1][i]) dp[i][k]=dp[j][k-1]*a[j+1][i]; for(int i=dp[n][kk].n;i>=1;--i) printf("%d",dp[n][kk].a[i]);}int main(){// freopen("a.in","r",stdin); n=read();kk=read();scanf("%s",s+1); if(n<=15) solve1(); else solve2(); return 0;}
C
#include <bits/stdc++.h>using namespace std;#define N 30int n,ans=0,cnt[N];char s[N][1000],res[3000000];bool jud(char a[],char b[]){//判断a是否包含在b的前面 int la=strlen(a+1),lb=strlen(b+1); if(la>=lb) return 0; for(int i=1;i<=la;++i) if(a[i]!=b[i]) return 0; return 1;}void dfs(int now,int len){ ans=max(ans,len); for(int i=now;i<=len;++i){ char s1[3000];memset(s1,0,sizeof(s1)); for(int j=i;j<=len;++j) s1[j-i+1]=res[j]; for(int j=1;j<=n;++j) if(cnt[j]<=1&&jud(s1,s[j])){ cnt[j]++;for(int k=1;k<=strlen(s[j]+1);++k) res[i+k-1]=s[j][k]; dfs(i+1,i+strlen(s[j]+1)-1); cnt[j]--; } }}int main(){// freopen("a.in","r",stdin); scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%s",s[i]+1); scanf("%s",res+1); dfs(1,1); printf("%d\n",ans); return 0;}
D
#include <bits/stdc++.h>using namespace std;#define N 15#define ll long longinline ll read(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int n;ll mp[N][N],dp[N<<1][N][N];//dp[k][i][j],共走k步,1向下i步,2向下j步int main(){// freopen("a.in","r",stdin); n=read(); while(1){ int x=read(),y=read(),val=read(); if(x==0) break; mp[x][y]=val; }dp[0][0][0]=mp[1][1]; for(int k=1;k<=n-1<<1;++k) for(int i=0;i<=n-1;++i)//可以向下走0步!!! for(int j=0;j<=n-1;++j){ if(i>k||j>k||k-i>n-1||k-j>n-1) continue; dp[k][i][j]=max(max(dp[k-1][i][j],dp[k-1][i-1][j]),max(dp[k-1][i-1][j-1],dp[k-1][i][j-1])); dp[k][i][j]+=mp[i+1][k-i+1]; if(i!=j) dp[k][i][j]+=mp[j+1][k-j+1]; } printf("%lld\n",dp[n-1<<1][n-1][n-1]); return 0;}
阅读全文
0 0
- NOIP模拟9.12
- Noip模拟
- 【NOIP模拟】20151004模拟
- 【NOIP模拟】 20151005模拟
- 【NOIP模拟】 20151006模拟
- 【NOIP模拟】 20151007模拟
- 【NOIP模拟】20151014模拟
- 【NOIP模拟】20151015模拟
- 【09 NOIP 模拟】light
- [NOIP模拟]Day1
- 8.9CH NOIP模拟
- 8.10FCH NOIP模拟
- 8.13NOIP模拟
- 8.14NOIP模拟
- noip模拟赛 双城记
- Noip模拟总结
- 【noip模拟赛】密码
- [模拟][NOIP 2013]花匠
- springmvc中文乱码
- mysql数据库
- Java Web书籍推荐
- 最全Pycharm教程(16)——Pycharm编辑器功能之代码自动生成
- 51Nod
- NOIP模拟9.12
- linux重定向输入和输出
- mysql连接查询
- 会场安排问题(贪心算法,Ruby)
- 9. Palindrome Number
- 查看文件命令笔记
- centOs下配置防火墙
- Redis支持的五种数据类型
- unity3d 菜单项解释