第二次练习赛标程
来源:互联网 发布:剑三丐帮成男捏脸数据 编辑:程序博客网 时间:2024/05/18 01:16
鉴于渣诚已经发布了第二次练习赛解题报告,所以我只打算留下自己验题时的标程,其中大量应用了STL,某些也没按照题意来做,看下就好。
A. SubMatrix××
#include<cstdio>#include<cstring>const int MAXN=505;long long sum[MAXN][MAXN];using namespace std;int main(){ int m,n,k,c1,c2,r1,r2; while(~scanf("%d%d%d",&m,&n,&k)) { memset(sum,0,sizeof(sum)); for(int i=1; i<=m; ++i) for(int j=1; j<=n; ++j) { scanf("%lld",&sum[i][j]); sum[i][j]+=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]; } while(k--) { scanf("%d%d%d%d",&c1,&c2,&r1,&r2); printf("%lld\n",sum[r2][c2]-sum[r1-1][c2]-sum[r2][c1-1]+sum[r1-1][c1-1]); } }}
B. SubMatrix×××××
#include<cstdio>#include<cstring>const int MAXN=505;int cnt[MAXN][MAXN][10];using namespace std;int main(){ int m,n,q,tmp,x1,y1,x2,y2; while(~scanf("%d%d%d",&m,&n,&q)) { memset(cnt,0,sizeof(cnt)); for(int i=1; i<=m; ++i) for(int j=1; j<=n; ++j) { scanf("%d",&tmp); ++cnt[i][j][tmp]; for(int k=0; k<=9; ++k) cnt[i][j][k]+=cnt[i-1][j][k]+cnt[i][j-1][k]-cnt[i-1][j-1][k]; } while(q--) { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); int ans=0; for(int i=0; i<=9; ++i) if(cnt[x2][y2][i]-cnt[x1-1][y2][i]-cnt[x2][y1-1][i]+cnt[x1-1][y1-1][i]>0) ++ans; printf("%d\n",ans); } }}
C. 微软( ⊙ o ⊙ )啊!
#include<cstdio>#include<cstdlib>using namespace std;struct LinkList{ char data; LinkList *next;};void CreateList(LinkList *&L,int n){ LinkList *s,*r; L=(LinkList *)malloc(sizeof(LinkList)); r=L; for(int i=0; i<n; ++i) { s=(LinkList *)malloc(sizeof(LinkList)); scanf(" %c",&s->data); r->next=s; r=s; } r->next=L->next;}void DispList(LinkList *L,int n,int k){ LinkList *p=L->next; for(int i=0; i<n-k%n; ++i) p=p->next; for(int i=0; i<n; ++i) { printf("%c",p->data); p=p->next; } putchar('\n');}void DestroyList(LinkList *&L,int n){ LinkList *pre=L,*p=L->next; for(int i=0; i<n; ++i) { free(pre); pre=p; p=pre->next; } free(pre);}int main(){ int t,n,k; scanf("%d\n",&t); while(t--) { scanf("%d%d",&n,&k); LinkList *L; CreateList(L,n); DispList(L,n,k); DestroyList(L,n); }}
#include<cstdio>#include<list>using namespace std;list<char> data;list<char>::iterator p;int main(){ int t,n,k; char c; scanf("%d\n",&t); while(t--) { scanf("%d%d",&n,&k); for(int i=0; i<n; ++i) { scanf(" %c",&c); data.push_back(c); } p=data.begin(); for(int i=0; i<n-k%n; ++i) ++p; for(int i=0; i<n; ++i) { printf("%c",*p); ++p; if(p==data.end()) p=data.begin(); } putchar('\n'); data.clear(); }}
D. Who Should I Accompany?(Ⅰ)
#include<cstdio>#include<cstdlib>using namespace std;struct LinkList{ int data; LinkList *next;};void CreateList(LinkList *&L,int n){ LinkList *s,*r; L=(LinkList *)malloc(sizeof(LinkList)); r=L; for(int i=1; i<=n; ++i) { s=(LinkList *)malloc(sizeof(LinkList)); s->data=i; r->next=s; r=s; } r->next=L->next; L->next=r;}void Josephus(LinkList *&L,int k){ LinkList *p=L->next,*q; while(p->next!=p) { for(int i=1; i<k; ++i) p=p->next; q=p->next; p->next=q->next; free(q); } printf("%d\n",p->data); free(p); free(L);}int main(){ int n,k; while(~scanf("%d%d",&n,&k)) { LinkList *L; CreateList(L,n); Josephus(L,k); }}
#include<cstdio>#include<list>using namespace std;int main(){ int n,k; list<int> data; list<int>::iterator p,q; while(~scanf("%d%d",&n,&k)) { for(int i=1; i<=n; ++i) data.push_back(i); p=data.begin(); while(data.size()!=1) { for(int i=1; i<k; ++i) { ++p; if(p==data.end()) p=data.begin(); } q=p++; if(p==data.end()) p=data.begin(); data.erase(q); } printf("%d\n",*p); data.clear(); }}
非链表版:
#include<cstdio>int main(){ int n,k; while(~scanf("%d%d",&n,&k)) { int s=0; for(int i=2; i<=n; ++i) s=(s+k)%i; printf("%d\n",s+1); }}
E. 线性表操作
#include<cstdio>#include<cstdlib>using namespace std;struct SqList{ int data[205],length;};void CreateList(SqList *&L,int n){ L=(SqList *)malloc(sizeof(SqList)); for(int i=0; i<n; ++i) scanf("%d",&L->data[i]); L->length=n;}void DispList(SqList *L){ for(int i=0; i<L->length; ++i) printf("%d ",L->data[i]); putchar('\n');}bool ListInsert(SqList *&L,int x,int y){ if(x<1||x>L->length+1) return false; --x; for(int i=L->length; i>x; --i) L->data[i]=L->data[i-1]; L->data[x]=y; ++L->length; DispList(L); return true;}int ListLocate(SqList *L,int x){ int t=0; while(t<L->length&&L->data[t]!=x) ++t; if(t>=L->length) return 0; else printf("%d\n",t+1); return t+1;}bool ListDelete(SqList *&L,int x){ int t=0; while(t<L->length&&L->data[t]!=x) ++t; if(t>=L->length) return false; for(int i=t; i<L->length-1; ++i) L->data[i]=L->data[i+1]; --L->length; DispList(L); return true;}bool GetElem(SqList *L,int x){ if(x<1||x>L->length) return false; printf("%d\n",L->data[x-1]); return true;}int main(){ int n,m; char order[10]; while(~scanf("%d%d",&n,&m)) { SqList *L; CreateList(L,n); while(m--) { int ans,x,y; scanf("%s%d",order,&x); switch(order[0]) { case 'I': scanf("%d",&y); ans=ListInsert(L,x,y); break; case 'D': ans=ListDelete(L,x); break; case 'L': ans=ListLocate(L,x); break; case 'G': ans=GetElem(L,x); break; } if(ans==0) puts("Wrong Input!"); } free(L); }}
#include<cstdio>#include<vector>using namespace std;vector<int> data;vector<int>::iterator it;void DispList(){ for(it=data.begin(); it!=data.end(); ++it) printf("%d ",*it); putchar('\n');}bool ListInsert(int x,int y){ if(x<1||x>data.size()+1) return false; data.insert(data.begin()+x-1,y); DispList(); return true;}int ListLocate(int x){ for(int i=0; i<data.size(); ++i) if(data[i]==x) { printf("%d\n",i+1); return i+1; } return 0;}bool ListDelete(int x){ for(it=data.begin(); it!=data.end(); ++it) if(*it==x) { data.erase(it); DispList(); return true; } return false;}bool GetElem(int x){ if(x<1||x>data.size()) return false; printf("%d\n",data[x-1]); return true;}int main(){ int n,m,tmp; char order[10]; while(~scanf("%d%d",&n,&m)) { data.reserve(n+m); while(n--) { scanf("%d",&tmp); data.push_back(tmp); } while(m--) { int ans,x,y; scanf("%s%d",order,&x); switch(order[0]) { case 'I': scanf("%d",&y); ans=ListInsert(x,y); break; case 'D': ans=ListDelete(x); break; case 'L': ans=ListLocate(x); break; case 'G': ans=GetElem(x); break; } if(ans==0) puts("Wrong Input!"); } data.clear(); }}
F. Plague Inc.
#include<cstdio>#include<list>using namespace std;list<int> data;list<int>::iterator it;int main(){ int n,m,tmp; while(~scanf("%d",&n)) { while(n--) { scanf("%d",&m); while(m--) { scanf("%d",&tmp); data.push_back(tmp); } } printf("%d\n",data.size()); for(it=data.begin(); it!=data.end(); ++it) printf("%d ",*it); putchar('\n'); data.clear(); }}
G. Thor’s Necklace
#include<cstdio>#include<algorithm>using namespace std;const int MAXN=1000005;int a[MAXN];int main(){ int n; while(~scanf("%d",&n)) { for(int i=0; i<n; ++i) scanf("%d",&a[i]); int l=unique(a,a+n)-a; printf("%d\n",l); for(int i=0; i<l; ++i) printf("%d ",a[i]); putchar('\n'); }}
最后想说的是,对于一道题而言,AC并不是结束。助教们早已掌握这些方面的知识,但每道题依然会写上不止一种实现以锻炼自己的编码能力,希望童鞋们也能勤学苦练。
0 0
- 第二次练习赛标程
- 第二次练习
- 第二次练习
- 第二次作业编码练习
- 第二次练习总结
- 函数第二次练习
- python第二次小练习
- java第二次练习
- 第二次练习作业2
- ACM第二次练习—1001
- ACM第二次练习—1002
- ACM第二次练习—1003
- ACM第二次练习—1004
- ACM第二次练习—1005
- ACM第二次练习—1008
- ACM第二次练习—1017
- ACM第二次练习—1011
- ACM第二次练习—1026
- linux防火墙简单实现
- JAVA动态代理
- 将MongoDB设置为服务随机启动
- webhcat 安装及配置
- c++中对const关键字的理解
- 第二次练习赛标程
- SQL关键词
- 常用的DOS命令积累(更新中......)
- C++与VB
- 将图片保存在本地相册中
- 老外写的transient 关键字分析
- 算法-图论-Dijstra寻找最短路径
- HDU 2084 数塔(dp)
- [2012校赛新生组]反恐精英_求连续数字的最小数字个数