省赛选拔赛——组队赛第一场
来源:互联网 发布:mes软件开发 编辑:程序博客网 时间:2024/05/18 15:50
Rank 3。
这次的题是第七届浙江省省赛的题,出了6道,感觉还可以,第一次打组队,配合上稍有欠缺。
当时做题的细节记不清了,大体顺序还记得,开场我看B简单就先做了,CE一次WA一次。。
后来跟榜出了L和A,后来易神说K题类似欧拉回路,开始想K,我开始敲E题。出了E之后,易神过来写K,庄神和我看其他题,除了G太长其他的都看了。。我们感觉F有希望,看出来是唯一分解和贪心了。易神K题样例没过,我去Debug,他和庄神一块看F。E提出了之后一直在搞F不过,中途看有人出G,就跟了。一直到结束没出F。。
A:ZOJ 3322
读入之后对比,没难度。
#include<cstdio>#include<cstring>#include<cctype>using namespace std;int main(){ int t; scanf("%d",&t); while(t--){ int a,b,c; int x,y,z; scanf("%d%d%d%d%d%d",&a,&b,&c,&x,&y,&z); if(a!=x){ if(a<x) printf("javaman\n"); else printf("cpcs\n"); } else if(b!=y){ if(b<y) printf("javaman\n"); else printf("cpcs\n"); } else if(c==z) printf("same\n"); else if(c<z) printf("javaman\n"); else printf("cpcs\n"); } return 0;}
B:ZOJ 3323
读入之后,不是数字的输出。水题出现很大的失误,少头文件CE一次,忘记换行WA一次。
#include<cstdio>#include<cstring>#include<cctype>using namespace std;const int maxn=30;char s[maxn];int main(){ int t; scanf("%d",&t); getchar(); while(t--){ gets(s); int n=strlen(s); for(int i=0;i<n;++i) if(!isdigit(s[i])) putchar(s[i]); printf("\n"); } return 0;}
E:ZOJ 3326
月份和日子都是素数时能吃糖,求能吃糖的总天数。直接暴力出来的。一开始读错了题WA一次。
#include<cstdio>using namespace std;int mon[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};int candy[0];bool np[35]={1,1};inline bool isrun(int y){ return y%400==0||(y%4==0&&y%100!=0);}inline void pre(){ for(int i=0;i<35;++i){ if(!np[i]){ for(int j=i*i;j<35;j+=i) np[j]=true; } } return;}int main(){ pre(); int t; scanf("%d",&t); while(t--){ int cnt=0; int year1,mon1,day1,year2,mon2,day2; scanf("%d%d%d%d%d%d",&year1,&mon1,&day1,&year2,&mon2,&day2); bool flag=true; while(1){ if(!flag) break; if(year1>year2) break; while(1){ if(!np[mon1]){ if(!flag) break; if(year1==year2&&mon1>mon2) break; while(1){ if(year1==year2&&mon1==mon2&&day1>day2){ flag=false;break;} if(!np[day1]) cnt++; day1++; if(day1>mon[isrun(year1)][mon1]){ day1%=mon[isrun(year1)][mon1]; break; } } mon1++; } else { mon1++; day1=1; } if(mon1>12){ mon1%=12; break; } } year1++; } printf("%d\n",cnt); } return 0;}
F:ZOJ 3327
后来大部分时间都在想这道题,想到唯一分解和贪心了,可是只是枚举了所有的二元变换,一直WA,赛后重写过的。
#include<iostream>#include<algorithm>#include<string>#include<map>#include<cstring>using namespace std;string s;int a[4];void resolve(char& c){ switch(c) { case '1':break; case '2':++a[0];break; case '3':++a[1];break; case '4':a[0]+=2;break; case '5':++a[2];break; case '6':++a[0],++a[1];break; case '7':++a[3];break; case '8':a[0]+=3;break; case '9':a[1]+=2;break; } c='1'; return;}bool make_up(char c){ switch(c) { case '2':if(a[0]>=1){--a[0];return true;}break; case '3':if(a[1]>=1){--a[1];return true;}break; case '4':if(a[0]>=2){a[0]-=2;return true;}break; case '5':if(a[2]>=1){--a[2];return true;}break; case '6':if(a[0]>=1&&a[1]>=1){--a[0],--a[1];return true;}break; case '7':if(a[3]>=1){--a[3];return true;}break; case '8':if(a[0]>=3){a[0]-=3;return true;}break; case '9':if(a[1]>=2){a[1]-=2;return true;}break; } return false;}void ev(int pos){ if(!pos&&s[pos]=='9'){ s[pos]='0'; cout<<1; return; } if(s[pos]!='9'){s[pos]+=1;return;} s[pos]='0'; ev(pos-1); return;}int main(){ int t; cin>>t; cin.get(); while(t--){ memset(a,0,sizeof(a)); int pos=-1; s.resize(0); getline(cin,s); for(int i=0;i<(int)s.length();++i){ if(s[i]!='0') continue; if(i!=(int)s.length()-1){ ev((int)s.length()-1); cout<<s<<endl; goto END; } else{ ev((int)s.length()-2); cout<<s<<endl; goto END; } } for(int i=(int)s.length()-1;i>=0;--i){ bool flag=false; char c=s[i]; resolve(s[i]); for(char j=c+1;j<='9';++j) if(make_up(j)){ s[i]=j; pos=i; flag=true; break; } if(flag) break; } if(pos==-1) cout<<1; for(int i=(int)s.length()-1;i>pos;--i){ for(char j='9';j>'1';--j) if(make_up(j)){ s[i]=j; break; } } cout<<s<<endl; END:; } return 0;}
G:ZOJ 3328
本场最水的一道题,就是n/2,四个多小时的时候,看有人过了,代码很短,跟的。。
#include<iostream>using namespace std;int main(){ int n; while(cin>>n&&n) cout<<n/2<<endl; return 0;}
H:ZOJ 3329
概率DP,比赛时没出,赛后补的。状态当前点数剩余步数的期望,将期望用dp[i]=a[i]*dp[0]+b[i]代换,然后递归求出a[i]和b[i]。
#include<cstdio>#include<cstring>using namespace std;const int maxn=550;double p[20],A[maxn],B[maxn];int main(){ int t; scanf("%d",&t); while(t--){ memset(p,0,sizeof(p)); memset(A,0,sizeof(A)); memset(B,0,sizeof(B)); int n,k1,k2,k3,a,b,c; scanf("%d%d%d%d%d%d%d",&n,&k1,&k2,&k3,&a,&b,&c); for(int i=1;i<=k1;++i) for(int j=1;j<=k2;++j) for(int k=1;k<=k3;++k) if(a!=i||b!=j||c!=k) ++p[i+j+k]; int sum=k1+k2+k3; p[0]=1.0/k1/k2/k3; for(int i=3;i<=sum;++i) p[i]/=k1*k2*k3; for(int i=n;i>=0;--i){ A[i]=p[0],B[i]=1; for(int j=sum;j>=3;--j) A[i]+=p[j]*A[i+j],B[i]+=p[j]*B[i+j]; } printf("%.15lf\n",B[0]/(1-A[0])); } return 0;}
J:ZOJ 3331
比赛的时候看出来是个DP了,没想出来状态转移方程,赛后看学长代码才明白应该用当前任务编号和A、B两个机器的工作时间差作为状态。后来补了这道。
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;const int maxn=110;const int inf=0x3f3f3f3f;int a[maxn],b[maxn],d[maxn][maxn*2];int main(){ int t; scanf("%d",&t); while(t--){ memset(d,0x3f,sizeof(d)); int n; scanf("%d",&n); for(int i=0;i<n;++i) scanf("%d%d",&a[i],&b[i]); d[0][maxn]=0; for(int i=0;i<n;++i) for(int j=0;j<maxn*2;++j) if(j>maxn){ d[i+1][j-b[i]]=min(d[i+1][j-b[i]],d[i][j]+max(0,b[i]-(j-maxn))); d[i+1][maxn+a[i]]=min(d[i+1][maxn+a[i]],d[i][j]+a[i]); } else{ d[i+1][maxn-b[i]]=min(d[i+1][maxn-b[i]],d[i][j]+b[i]); d[i+1][j+a[i]]=min(d[i+1][j+a[i]],d[i][j]+max(0,a[i]-(maxn-j))); } int ans=inf; for(int i=0;i<maxn*2;++i) ans=min(ans,d[n][i]); printf("%d\n",ans); } return 0;}
K:ZOJ 3332
看官方报告,是个竞赛图的哈密顿路,我们是暴力过的。。
#include<cstdio>#include<cstring>#include<cctype>using namespace std;const int maxn=110;bool g[maxn][maxn];int cnt[2][maxn],n;int road[maxn];bool vis[maxn],find0;bool pan(int i,int cur){ road[cur]=i+1; if (cur==n) return find0=true; for (int j=0;j<n;j++){ if (g[i][j]&&!vis[j]){ vis[j]=true; if(pan(j,cur+1)) return true; vis[j]=false; } } return false;}int main(){ int t; scanf("%d",&t); while(t--){ memset(g,0,sizeof(g)); memset(cnt,0,sizeof(cnt)); memset(vis,0,sizeof(vis)); scanf("%d",&n); int num=n*(n-1)/2; for(int i=0;i<num;++i){ int u,v; scanf("%d%d",&u,&v); g[u-1][v-1]=true; } find0=false; for (int i=0;i<n;i++){ memset(vis,0,sizeof(vis)); vis[i]=true; if(pan(i,1)) break; } if(find0){ printf("%d",road[1]); for (int i=2;i<=n;++i) printf(" %d",road[i]); printf("\n"); } else printf("impossible\n"); } return 0;}
L:ZOJ 3333
直接比大小就行,物品价格没有用。
#include<cstdio>#include<cstring>#include<cctype>using namespace std;int main(){ int t; scanf("%d",&t); while(t--){ int a,b,c; scanf("%d%d%d",&a,&b,&c); if(b>c) printf("A\n"); else printf("B\n"); } return 0;}
- 省赛选拔赛——组队赛第一场
- 省赛选拔赛——组队赛第二场
- 省赛选拔赛——组队赛第三场
- 省赛选拔赛——组队赛第四场
- 省赛选拔赛——个人赛第一场
- 组队赛第一场线段树
- 省赛选拔赛——个人赛第二场
- 省赛选拔赛——个人赛第三场
- 省赛选拔赛——个人赛第四场
- 14级组队赛第一场3317- 反演
- 组队选拔赛4场后小结
- 第九周周赛——周赛兼组队赛第一场题解(出自HDU5443,本oj,HDU 5667,poj1742,codeforces 664A,BUNOJ 28199)
- 随机组队_第一场
- 2014 BUAA 选拔赛第一场
- XDOJ省赛选拔赛第二场H题
- 14级组队赛第一场3319 A simple water problem
- 2017年5月月赛-暨中南大学暑期集训选拔赛第一场-部分题目
- 2015.9.4第三场组队赛
- 基于Threejs的jQuery 3d图片旋转木马特效插件
- MYSQL查询重复记录的方法
- ELCImagePicker 学习总结(五)
- Makefile之 Makefile浅析
- json lib应用示例
- 省赛选拔赛——组队赛第一场
- 三羊献瑞
- Spring mvc,MyBatis事物不回滚问题
- 经典背包问题 01背包+完全背包+多重背包
- shell中数字大小的比较
- 使用AddDays到第二天凌晨
- 【算法之动态规划(三)】动态规划算法之:最长公共子序列 & 最长公共子串(LCS),字符串相似度算法
- 001537435390098644
- Linux 网络编程——网络字节序、地址转换