蓝桥杯选拔赛(我是渣渣)
来源:互联网 发布:windows下一个版本 编辑:程序博客网 时间:2024/04/28 12:24
只把开了的题补了
1346: DARK SOULS
dfs找联通快 注意一个怪也是一群怪
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<queue>using namespace std;priority_queue<int,vector<int>,greater<int> >Q;const int maxn=100+10;bool vis[maxn*maxn];int n,k,d,s,cnt,fb,xx[maxn],yy=0;struct Node{ int x,y,id;}node[maxn*maxn];bool judge(int a,int b,int aa,int bb){ if(fabs(a-aa)<=d&&fabs(b-bb)<=d) return true; return false;}void dfs(int cur){ int x=node[cur].x; int y=node[cur].y; vis[cur]=true; for(int i=1;i<=s;i++) { if(cur!=i&&!vis[i]) { int xx=node[i].x; int yy=node[i].y; if(judge(x,y,xx,yy)) { fb++; dfs(i); } } }}int main(){ int t,ans,sum,l,r; scanf("%d",&t); while(t--) { sum=ans=0; scanf("%d%d%d%d",&n,&k,&d,&s); memset(vis,false,sizeof(vis)); for(int i=1;i<=s;i++) scanf("%d%d",&node[i].x,&node[i].y); for(int i=1;i<=s;i++) { fb=1; if(!vis[i]) { dfs(i); sum+=fb; ans++; } } int temp=ans; ans=(ans/k)+1; if(temp%k==0) ans--; printf("%d\n",ans); } return 0;}/*12 1 1 41 11 22 12 2*/1347: GCD
求最大的数在【1,n】中 使gcd(x,n)==1
这个数必然是n-1啊 直接模拟即可。
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std;priority_queue<int,vector<int>,greater<int> >Q; const int maxn=5000+10; char s[maxn]; int main(){ int t,ok,pd; scanf("%d",&t); while(t--) { scanf("%s",s+1); int len=strlen(s+1); if(s[len]!='0') { s[len]=s[len]-1; printf("%s\n",s+1); } else { for(int i=len;i>=1;i--) { if(s[i]=='0') s[i]='9'; else { s[i]-=1; break; } } if(s[1]=='0') pd=2; else pd=1; for(int i=pd;i<=len;i++) printf("%c",s[i]); printf("\n"); } } return 0;}1349: TLE 用它给的tle的程序打表即可
会发现直接求前缀和
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std;priority_queue<int,vector<int>,greater<int> >Q; const int maxn=5000+10; int a[maxn],N,K,pre[maxn]; int main(){ int ans; while(~scanf("%d%d",&N,&K)) { ans=0; for(int i=1;i<=N;i++) scanf("%d",&a[i]); pre[0]=0; for(int i=1;i<=N;i++) pre[i]=pre[i-1]+a[i]; for(int i=0;i<=N-2;i++) for(int j=i+2;j<=N;j++) { if((pre[j]-pre[i])%K==0) ans++; } printf("%d\n",ans); } return 0;}
1352: 看美女
从做到右,从右到左,扫一遍即可
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std;priority_queue<int,vector<int>,greater<int> >Q; const int maxn=200000+10;bool vis1[maxn],vis2[maxn];int h[maxn],t,n; int main(){ int le_max,ri_max,ans; scanf("%d",&t); while(t--) { ans=0; scanf("%d",&n); memset(vis1,false,sizeof(vis1)); memset(vis2,false,sizeof(vis2)); for(int i=1;i<=n;i++) scanf("%d",&h[i]); le_max=ri_max=-1; for(int i=1;i<=n;i++) { if(h[i]>=le_max) { le_max=h[i]; vis1[i]=true; } } for(int i=n;i>=1;i--) { if(h[i]>=ri_max) { ri_max=h[i]; vis2[i]=true; } } for(int i=1;i<=n;i++) { if(vis1[i]||vis2[i]) ans++; } printf("%d\n",ans); } return 0;}1355: 巧克力
这题就是我的遗憾之处,哎 搞出来了 结果其中一个函数把push_down写成了push_up,我操 ,自己造的数据也过了
哎,真是不该
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<queue>#include<algorithm>using namespace std;priority_queue<int,vector<int>,greater<int> >Q; const int maxn=1000000+10; int tree[maxn<<2],col[maxn<<2];int n,m; void push_up(int dex){ tree[dex]=max(tree[dex<<1],tree[dex<<1|1]);} void push_down(int dex){ if(col[dex]) { col[dex<<1]+=col[dex]; col[dex<<1|1]+=col[dex]; tree[dex<<1]+=col[dex]; tree[dex<<1|1]+=col[dex]; col[dex]=0; }} void buildtree(int dex,int l,int r){ col[dex]=0; if(l==r) { scanf("%d",&tree[dex]); return; } int mid=(l+r)>>1; buildtree(dex<<1,l,mid); buildtree(dex<<1|1,mid+1,r); push_up(dex);} void Update1(int dex,int l,int r,int pos,int val){ if(l==r) { tree[dex]=val; return; } push_down(dex); int mid=(l+r)>>1; if(pos<=mid) Update1(dex<<1,l,mid,pos,val); else Update1(dex<<1|1,mid+1,r,pos,val); push_up(dex);} void Update2(int dex,int l,int r,int L,int R){ if(L<=l&&R>=r) { col[dex]+=1; tree[dex]+=1; return; } push_down(dex); int mid=(l+r)>>1; if(L<=mid) Update2(dex<<1,l,mid,L,R); if(R>mid) Update2(dex<<1|1,mid+1,r,L,R); push_up(dex);} int Query(int dex,int l,int r,int L,int R){ if(L<=l&&R>=r) return tree[dex]; push_down(dex); int mid=(l+r)>>1; if(L>mid) return Query(dex<<1|1,mid+1,r,L,R); else if(R<=mid) return Query(dex<<1,l,mid,L,R); else return max(Query(dex<<1|1,mid+1,r,L,R),Query(dex<<1,l,mid,L,R));} int main(){ char op[maxn]; int a,b; while(~scanf("%d%d",&n,&m)) { buildtree(1,1,n); for(int i=1;i<=m;i++) { scanf("%s",op); if(strcmp(op,"Query")==0) { scanf("%d%d",&a,&b); a++; b++; int ans=Query(1,1,n,a,b); printf("%d\n",ans); } else if(strcmp(op,"Ask")==0) { scanf("%d",&a); a++; int ans=Query(1,1,n,a,a); printf("%d\n",ans); } else if(strcmp(op,"Change")==0) { scanf("%d%d",&a,&b); a++; Update1(1,1,n,a,b); } else { scanf("%d%d",&a,&b); a++; b++; Update2(1,1,n,a,b); } } } return 0;}
最后一个kmp,暴力也可过,不贴代码了
结束了 哎 我太渣了
0 0
- 蓝桥杯选拔赛(我是渣渣)
- 华东交通大学2016届新生选拔赛:1010 我是签到题
- 蓝桥杯校内选拔赛
- 蓝桥杯选拔赛题解
- 2012java蓝桥杯本科选拔赛
- 蓝桥杯校内选拔赛 派遣敢死队
- 华东交通大学2016届新生选拔赛:1006 我是大水题哦
- 2011年 “蓝桥杯”选拔赛 java 本科
- NYNU ACM 蓝桥杯选拔赛 解题报告
- 我是...
- 我是...
- 我是渣渣,我要记录进步的历程了。
- 蓝桥杯(又蓝点杯)程序设计选拔赛题目解答(一)
- 蓝桥杯(又蓝点杯)程序设计选拔赛题目解答(二)
- 蓝桥杯(又蓝点杯)程序设计选拔赛题目解答(四)
- 蓝桥杯(又蓝点杯)程序设计选拔赛题目解答(五)
- 蓝桥杯(又蓝点杯)程序设计选拔赛题目解答(三)
- 选拔赛+总结
- iBATIS2.3入门项目(附源码)
- 我的,算法学习规划。
- 设计模式之行为型模式(一)
- 2014年11月OI总结
- SecureCRT 报错:The remote system refused the connection
- 蓝桥杯选拔赛(我是渣渣)
- lcd1602.c
- 第十四周项目三(3)
- 模运算及其性质
- Flex动态获取方法报错
- 单例模式
- 单例模式总结
- 用ultraedit实现编码转换
- [搜索]波特词干(Porter Streamming)提取算法详解(3)