Test 6 for NOIP
来源:互联网 发布:ug编程二次开粗技巧 编辑:程序博客网 时间:2024/05/20 05:53
头大
这个暑假完就要去搞NOIP了。。。
暑假55天也就20次测试。。。为防万一我还是每次测试玩都写个总结。。
???曾老说好的题为什么做了一个半小时又换题了系列???
。。。这次更无语。。中途一群人闹着换题被搞晕然后心态失衡零分。
Day?(0/300)
T1 T1:排列的最大长度
自己不背最长子序列模板怪我咯
STD.CPP
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstdlib>#include<string>#include<cstring>#include<ctime>using namespace std;int n,input[100005],b[100005];int a,f[100005];int main(){ cin >> n; for(int i=1;i<=n;i++)cin>>a,input[a]=i; for(int i=1;i<=n;i++)cin>>a,b[i]=input[a]; int l=1,r=0,top=0; for(int i=1;i<=n;i++) { l = 1; r = top; int mid = (l+r)/2; while(l<=r) { mid = (l+r)/2; if(f[mid]>b[i]) r = mid-1; else l = mid+1; } if(l>top) top++,l=top; f[l] = b[i]; } cout << top;}
T2 T2:覆盖节点
当时没读懂题就没做。。事后发现并不难想。。
STD.CPP
#include<cstdio>#include<cstdlib>#include<iostream>#include<iomanip>#include<cstring>#include<string>#include<algorithm>#include<ctime>using namespace std;int n,l,tot=0,first[2000002];int stack[2000002];bool visit[2000002];struct node{ int x; int y; int w; int next;}side[2000002];int d[1000005];void addedge(int x,int y,int w){ side[++tot].x=x; side[tot].y=y; side[tot].w=w; side[tot].next=first[x]; first[x]=tot; d[x] += 1;}int main() { //freopen("t2.in","r",stdin); //freopen("t2.out","w",stdout); cin.sync_with_stdio(false); int x,y; cin >> n >> l; l *= 2; if(2*n==l) {cout << n;return 0;} for(int i=1;i<n;i++) { cin >> x >> y; addedge(x,y,1); addedge(y,x,1); } int l1=1,r1=0; for(int i=1;i<=n;i++) if(d[i]==1) { r1 += 1; stack[r1] = i; visit[i] = true; } int ans = 0; while(l1<=r1) { int k = r1-l1+1; ans += min(l,k); for(int j=1;j<=k;j++) for(int i=first[stack[l1++]];i;i=side[i].next) { d[side[i].y]--; if(!visit[side[i].y]&&d[side[i].y]==1) { stack[++r1] = side[i].y; visit[side[i].y] = true; } } } cout << ans; }
T3 T3:系列维护
果断:当时还不会树状数组暴力又挂。。。还得研究研究
STD.CPP
#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cmath>#include<ctime>#include<cstring>#include<string>using namespace std;inline void readi(int &i){ char p; p=getchar(); while(p>'9'||p<'0')p=getchar(); while(p>='0'&&p<='9') { i=i*10+p-'0'; p=getchar(); }}int m,n,size,us[1000005],s[1000005],c[1000005],a[1000005];long long num,small,sum,tr2[1000005];bool bz[1000005];char ch;int tr1[1000005];inline int lowbit(int i){ return i&(-i);}inline void add(int x,int y){ int i=x; while(i<=size) { tr1[i]+=y; tr2[i]+=us[x]*y; i+=lowbit(i); }}inline void query(int x){ sum=0; small=0; while(x) { sum+=tr1[x]; small+=tr2[x]; x-=lowbit(x); }}int main(){ //freopen("1.in","r",stdin); readi(n); readi(m); for(int i=1;i<=m;i++) { ch=getchar(); while(ch!='Z'&&ch!='U')ch=getchar(); if(ch=='Z')bz[i]=1; readi(c[i]); readi(s[i]); us[++size]=s[i]; } sort(us+1,us+size+1); size=unique(us+1,us+size+1)-us-1; for(int i=1;i<=m;i++) s[i]=lower_bound(us+1,us+size+1,s[i])-us; for(int i=1;i<=m;i++) if(bz[i]) { query(s[i]); sum=num-sum; if(small>=(long long)1*us[s[i]]*(c[i]-sum))puts("Yes"); else puts("No"); } else { if(a[c[i]])add(a[c[i]],-1); else num++; add(s[i],1); a[c[i]]=s[i]; } return 0;}
还是一句话:多刷题。。。
彩蛋?
来自出题人的关怀:
阅读全文
0 0
- Test 6 for NOIP
- *TEST 6 for NOIP + NOIP初赛
- Test 5 for NOIP
- Test 7 for NOIP
- Test 10 for NOIP
- tEST 2 for NOIP
- tEST 3 for NOIP
- *TEST 1 for NOIP
- *TEST 5 for NOIP 。。。
- Test 1 for NOIP: Result for Day1
- Test 1 for NOIP: Result for Day2
- Test 2 for NOIP- Result for Day1
- Test 2 for NOIP- Result for Day2
- Test 3 for NOIP- Result for Day2
- Test 4 for NOIP- Result for Day1
- Test 4 for NOIP- Result for Day2
- Test 8 for NOIP- Result for Day1
- Test 8 for NOIP- Result for Day2
- 使用两个栈实现一个队列+使用两个队列实现一个栈
- Java集合小结
- 『毒舌电影社区』干掉烂片,让烂片无路可走!
- CodePush配置
- tbschedule与spring整合
- Test 6 for NOIP
- Android 九宫格加载动画
- EJB到底是什么?
- Cordova+Angularjs+Ionic混合开发入门篇(二)—— 创建ionic工程
- BZOJ 3790: 神奇项链 manacher
- 使用JDBC编写通用的查询方法
- Python 列表(List)
- blast2go本地安装,一个防火墙设置引发的血案
- Mysql索引及优化