NOIP 2004 题解
来源:互联网 发布:前端跟美工的区别 编辑:程序博客网 时间:2024/05/19 03:16
NOIP2004好水啊,我这种蒟蒻都能AK……;
T1:
https://www.luogu.org/problem/show?pid=1089
淼,最简单的模拟
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int q[15],ans,sum,n=12;void solve(){ for(int i=1;i<=n;i++) scanf("%d",&q[i]); for(int i=1;i<=n;i++) { int f=sum+300-q[i],c=f%100; if(f>=100) ans+=f-c; sum=c; if(sum<0) cout<<-i<<endl,exit(0); } cout<<sum+ans*1.2; return;}int main(){ solve(); return 0;}
T2:
https://www.luogu.org/problem/show?pid=1090
淼,堆,来个手打;
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>using namespace std;const int MAXN=100010;int h[MAXN],n,ans,sum,v1,v2;void read(int &a){ int ans=0; char c=getchar(); while(c<'0'||c>'9') c=getchar(); while(c>='0' && c<='9') ans*=10,ans+=c-'0',c=getchar(); a=ans; return;} void swap(int a,int b){ int t; t=h[a],h[a]=h[b],h[b]=t; return;}void heap(int i){ int t,flag=1; while(i*2<=n && flag) { if(h[i]>h[i*2] && i*2<=n) t=i*2; else t=i; if(h[t]>h[i*2+1] && i*2+1<=n) t=i*2+1; if(i!=t) swap(i,t),i=t; else flag=0; } return;}void creat(){ for(int i=n/2;i>=1;i--) heap(i); return;}void push(int s){ int i=n+1,flag=1; h[i]=s,n++; if(i==1) return; while(i!=1 && flag) { if(h[i]<h[i/2]) swap(i,i/2); else flag=0; i/=2; } return;}void pop() { swap(1,n),n--,heap(1); return;}int top() { return h[1];}void solve(){ cin>>n; for(int i=1;i<=n;i++) read(h[i]); cin>>n; creat(); while(n!=1) { v1=top(),pop(); v2=top(),pop(); sum=0,sum=v1+v2; ans+=sum; push(sum); } cout<<ans; return;}int main(){ solve(); return 0;}
T3
https://www.luogu.org/problem/show?pid=1091
淼,正反两边最长上升子序列,最后加1(中间的人加了两遍)
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int n,dp1[20001],dp2[20001],num[20001],ans=-1;void solve(){ cin>>n; for(int i=1;i<=n;i++) scanf("%d",&num[i]),dp1[i]=dp2[i]=1; for(int i=1;i<=n;i++) for(int j=1;j<i;j++) if(num[i]>num[j]) dp1[i]=max(dp1[j]+1,dp1[i]); for(int i=n;i>=1;i--) for(int j=n;j>i;j--) if(num[i]>num[j]) dp2[i]=max(dp2[j]+1,dp2[i]); for(int i=1;i<=n;i++) ans=max(ans,dp1[i]+dp2[i]); cout<<n-ans+1;}int main(){ solve(); return 0;}
T4
https://www.luogu.org/problem/show?pid=1092
个人认为这是2004NOIP唯一一个值得做的题;
题解:
http://blog.csdn.net/qq_36312502/article/details/78072903
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN=10001;int n,a[4][MAXN],ans[MAXN],a1,a2,a3;string s1,s2,s3;bool can[MAXN];bool pd(int y)//优化2{ for(int i=y+1;i<=n;i++) if(ans[a[1][i]]!=-1 && ans[a[2][i]]!=-1 && ans[a[3][i]]!=-1) if((ans[a[1][i]]+ans[a[2][i]])%n!=ans[a[3][i]] && (ans[a[1][i]]+ans[a[2][i]]+1)%n!=ans[a[3][i]]) return false; return true;}void dfs(int x,int y,int ge){ if(y>n && ge^1) { for(int i=1;i<=n;i++) cout<<ans[i]<<" "; exit(0); } if(!pd(y)) return; a1=ans[a[1][y]],a2=ans[a[2][y]],a3=ans[a[3][y]]; if(ans[a[x][y]]==-1 && x<=3) { if(x==3)//优化2 { int tot=a1+a2+ge; if(tot<n && !can[tot]) { can[tot]=1,ans[a[3][y]]=tot; dfs(1,y+1,0); can[tot]=0,ans[a[3][y]]=-1; } else if(tot>=n && !can[(tot+n)%n]) { can[(tot+n)%n]=1,ans[a[3][y]]=(tot+n)%n; dfs(1,y+1,1); can[(tot+n)%n]=0,ans[a[3][y]]=-1; } else return; } else for(int i=n-1;i>=0;i--)//优化3; { if(!can[i]) { can[i]=1,ans[a[x][y]]=i; dfs(x+1,y,ge); can[i]=0,ans[a[x][y]]=-1; } } return; } else { if(x>=4) { if((ge && a1+a2+1==a3) || (!ge && a1+a2==a3)) dfs(1,y+1,0); else if((ge && (a1+a2+1)%n==a3) || (!ge && (a1+a2)%n==a3)) dfs(1,y+1,1); else return; } else dfs(x+1,y,ge); } return;}void solve(){ scanf("%d",&n); cin>>s1>>s2>>s3; for(int i=1;i<=n;i++) a[1][i]=s1[n-i]-'A'+1,a[2][i]=s2[n-i]-'A'+1,a[3][i]=s3[n-i]-'A'+1; memset(ans,-1,sizeof(ans)); dfs(1,1,0); return;}int main(){ solve(); return 0;}
阅读全文
1 0
- NOIP 2004 题解
- NOIP 2004 合并果子 题解 (堆 )
- NOIP 2010 题解
- NOIP 2012 题解
- NOIP模拟21题解
- NOIP模拟题题解
- NOIP 2015 简要题解
- NOIP-2016-普及-题解
- NOIP-2009-提高-题解
- Noip 2013 day1 题解
- NOIP 2010 题解
- NOIP 2015 题解
- NOIP 2009 题解+代码
- NOIP 2010 题解+代码
- NOIP 2011 题解+代码
- NOIP 2016 题解+代码
- NOIP普及组题解
- NOIP 2017 Day1 题解?
- C/C++中static关键字的作用
- nodejs安装不了和npm安装失败的解决方法
- Java零散小知识:使用Servlet时报java.lang.classnotfoundexception
- google protocol buffer 基础指南
- C++常见误区、常用方法(长期更新)
- NOIP 2004 题解
- 阿里云esc云服务器IP不能访问的解决办法
- 比较顺序表和链表
- 主席树——区间第K大
- Eclipse+Maven创建webapp项目
- HTML 文档结构
- 《C++ Concurrency in Action》笔记22 std::atomic_flag
- jQuery
- poj3281 Dining