2016 PSUT Coding Marathon(gym100989)
来源:互联网 发布:新浪nba科比数据 编辑:程序博客网 时间:2024/04/30 20:01
A, C签到题
Gym 100989B
题意:给一个算LCS时得到的DP矩阵,然后根据这个矩阵让你算出两个符合条件的字符串
/************************************************************************* File Name: B.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月18日 星期一 11时58分21秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;const int N=110;int dp[N][N];char a[N],b[N];bool vis_b[N];int main(){ int n,m,i,j,k; while(~scanf("%d%d",&n,&m)){ for(i=0;i<n+1;++i) for(j=0;j<m+1;++j) scanf("%d",&dp[i][j]); for(i=0;i<n;++i)a[i]='a'+i; a[n]=b[m]='\0'; Mem0(vis_b); for(i=1;i<=n;++i) for(j=1;j<=m;++j) if(dp[i][j]==dp[i-1][j-1]+1 && dp[i][j]!=Max(dp[i-1][j],dp[i][j-1])){ if(!vis_b[j]){ b[j-1]=a[i-1]; vis_b[j]=1; }else{ for(k=0;k<m;++k) if(b[k]==a[i-1]) b[k]=b[j-1]; for(k=0;k<n;++k) if(a[k]==a[i-1] && k!=i-1) a[k]=b[j-1]; a[i-1]=b[j-1]; } } bool flag[26]; Mem0(flag); for(i=0;i<n;++i) flag[a[i]-'a']=1; int tmp; for(i=0;i<26;++i) if(!flag[i]){ tmp=i;break; } //cout<<"tmp="<<tmp<<endl; for(i=1;i<=m;++i) if(!vis_b[i])b[i-1]='a'+tmp; printf("%s\n%s\n",a,b); }}
Gym 100989D
题意:食堂从门口到里面按顺序摆了n张桌子,从1标号到n,分别可坐ai个人。q次操作,in x代表进来x人,他们要坐同一张桌子,工作人员会把他们带到他们能坐下的椅子最少的桌子,如果没有他们能坐的桌子他们就不在食堂吃了;out x代表x号桌的人走了。(比赛时题意理解错了,这题其实是道大水题,不用set也很简单,我用来熟悉set的操作)
思路:用set<pair<int,int>>维护,set中先按first,再按second有序。lower_bound查找按set定义的大小。
/************************************************************************* File Name: D.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月18日 星期一 11时59分19秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;const int N=1e5+10;int a[N];set<pair<int,int>> table;set<pair<int,int>>::iterator it;int main(){ int n,q,i,x,pos; char op[5]; while(~scanf("%d%d",&n,&q)){ for(i=1;i<=n;++i){ scanf("%d",a+i); table.insert({a[i],i}); } while(q--){ scanf("%s%d",op,&x); if(op[0]=='i'){ it=table.lower_bound({x,0}); if(it!=table.end()){ printf("%d\n",it->second); table.erase(it); }else puts("-1"); }else table.insert({a[x],x}); } }}
Gym 100989E
题意:给定a,b两个字符串,问a,b是否一致,若b长度>=8,则b可以有一个字符与a不一样或比a少一个。
思路:注意读题,多一个字符是不被允许的
/************************************************************************* File Name: E.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月18日 星期一 12时12分48秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;const int N=110;char s1[N],s2[N];int main(){ int len1,len2,i; while(~scanf("%s%s",s1,s2)){ len1=strlen(s1),len2=strlen(s2); if(len1==len2){ int cnt=0; for(i=0;i<len1;++i) if(s1[i]!=s2[i])cnt++; if(cnt==0 || (cnt==1 && len1>=8))puts("yes"); else puts("no"); }else if(len1-len2==1 && len1>=8){ bool flag=1; for(i=0;i<len2;++i) if(s1[i]!=s2[i])break; for(;i<len2;++i) if(s1[i+1]!=s2[i])flag=0; if(flag)puts("yes"); else puts("no"); }else puts("no"); }}
Gym 100989F
题意:
/************************************************************************* File Name: F.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月18日 星期一 12时30分42秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;const int N=1e5+10;int cnt[N],pos[N];int main(){ int n,m,q,i,x,p; while(~scanf("%d%d%d",&n,&m,&q)){ Mem0(cnt); int ans=0; for(i=1;i<=n;++i){ scanf("%d",&pos[i]); if(!cnt[pos[i]])ans++; cnt[pos[i]]++; } //cout<<"ans="<<ans<<endl; while(q--){ scanf("%d%d",&x,&p); cnt[pos[x]]--; if(!cnt[pos[x]])ans--; if(!cnt[p])ans++; cnt[p]++; pos[x]=p; printf("%d\n",m-ans); } }}
Gym 100989G
题意:
思路:二分。
/************************************************************************* File Name: G.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月18日 星期一 16时12分08秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;const int N=1e5+10;ll a[N];int main(){ ll k,av,sum,sav,maxn; int i,m; ios::sync_with_stdio(0); while(cin>>m>>k){ sum=maxn=0; for(i=0;i<m;++i){ cin>>a[i]; //cout<<"a["<<i<<"]="<<a[i]<<endl; sum+=a[i]; maxn=Max(maxn,a[i]); } av=(sum+m-1)/m; ll low=av,high=maxn,mid,ans; while(low<=high){ mid=(low+high)>>1; //cout<<"low="<<low<<" high="<<high<<" mid="<<mid<<endl; sav=0; for(i=0;i<m;++i){ if(a[i]>mid)sav+=a[i]-mid; } //cout<<"sav="<<sav<<" k="<<k<<endl; if(sav<=k)ans=mid,high=mid-1; else low=mid+1; } cout<<ans<<endl; }}
Gym 100989H
题意:又是找零问题。面额有1,5,10,20,50。初始没钱,问能否在不改变队伍顺序的情况下成功找零。
思路:思路很暴力,代码也很暴力
/************************************************************************* File Name: H.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月18日 星期一 12时43分58秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;int main(){ int n,k,cnt1,cnt5,cnt10,cnt20,cnt50; int x1,x5,x10,x20,x50,charge; while(~scanf("%d",&n)){ cnt1=cnt5=cnt10=cnt20=cnt50=0; bool flag=1; for(int i=0;i<n;++i){ scanf("%d%d%d%d%d%d",&k,&x1,&x5,&x10,&x20,&x50); cnt1+=x1,cnt5+=x5,cnt10+=x10; cnt20+=x20,cnt50+=x50; charge=x1*1+x5*5+x10*10+x20*20+x50*50-k; while(charge>=50 && cnt50) charge-=50,cnt50--; while(charge>=20 && cnt20) charge-=20,cnt20--; while(charge>=10 && cnt10) charge-=10,cnt10--; while(charge>=5 && cnt5) charge-=5,cnt5--; while(charge>=1 && cnt1) charge--,cnt1--; if(charge)flag=0; } if(flag)puts("yes"); else puts("no"); }}
Gym 100989I
Gym 100989J
题意:
思路:
/************************************************************************* File Name: J.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月18日 星期一 12时57分04秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;const int N=110;int k[N],mp[N][N],n;char op[N][2];void Print(int ch,int d){ int i; for(i=0;i<d;++i)printf(" "); if(k[ch])printf("%s ",op[ch]); else printf(" "); if(ch)printf("object%d\n",ch); else puts("project"); if(op[ch][0]=='-'){ for(i=0;i<k[ch];++i) Print(mp[ch][i],d+1); }}int main(){ int i,j; while(~scanf("%d",&n)){ for(i=0;i<=n;++i){ scanf("%s%d",op[i],&k[i]); for(j=0;j<k[i];++j) scanf("%d",&mp[i][j]); } Print(0,0); }}
Gym 100989K
Gym 100989L
题意:
思路:暴搜即可
/************************************************************************* File Name: L.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月18日 星期一 13时49分22秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;const int N=30;int a[N];struct node{ int x,step,i;}s,t;int main(){ int n,i,j,sum,sum2; char op[2]; while(~scanf("%d",&n)){ //cout<<"n="<<n<<endl; scanf("%d",a); sum=sum2=a[0]; for(i=1;i<n;++i){ scanf("%s%d",op,a+i); sum2+=a[i]; if(op[0]=='-')a[i]=-a[i]; sum+=a[i]; } queue<node> q; s.x=a[0],s.step=0,s.i=1; q.push(s); int ans=N; while(!q.empty()){ s=q.front(); q.pop(); //cout<<"s.x="<<s.x<<" i="<<i<<endl; if(s.x==0 && s.i==n) ans=Min(ans,s.step); if(s.i<=n){ t=s; t.x+=a[t.i++]; q.push(t); t=s; t.x-=a[t.i++],t.step++; q.push(t); } } if(ans==N)puts("-1"); else printf("%d\n",ans); }}
Gym 100989M
Gym 100989N
0 0
- 2016 PSUT Coding Marathon(gym100989)
- Marathon(4):Port
- Marathon(5):Constraints
- Marathon
- Marathon
- marathon
- Marathon(1):Application 基础
- Marathon(2):Application 部署
- Marathon(3):Application Groups
- poj 1985 Cow Marathon(树直径)
- POJ-1985 Cow Marathon (最大距离)
- POJ1985Cow Marathon(树的直径)
- Cow Marathon(数的直径)
- poj1985Cow Marathon (树的最长路径)
- codeforces 404B Marathon(模拟)
- (个人简介)Coding Home
- coding感想(二)
- Coding
- IOS开发中(null)与<null>的处理
- ACM知识点 之 贪心(4)部分背包问题
- Debian8下python3和python2同时安装如何使用pip
- shp文件保存到mysql
- shell从路径从取出文件名字
- 2016 PSUT Coding Marathon(gym100989)
- 【BZOJ】2301 Problem b
- pool(五)——BasicDataSource
- TypeError:First argument must be file descriptor
- 计算日期前一天,后一天
- javaweb 1
- Hibernate总结(五)--之多对多操作
- android中存储的一些步骤
- 关于kubernetes 的 cluster IP , node IP ,container IP , 和 VIP