CCF-CSP刷题库11-20
第十一次认证
201709-1 打酱油
#include#define MAX 1005 #define MOD 1000000007 using namespace std; typedef long long ll; int main() { int t,n,m,x,y,i,j,k; scanf("%d",&n); int ans=0; while(n){ if(n>=50){ n-=50; ans+=7; } else if(n>=30){ n-=30; ans+=4; } else{ ans+=n/10; n=0; } } printf("%d\n",ans); return 0; }
201709-2 公共钥匙盒
//枚举时间
#include#define MAX 1005 #define MOD 1000000007 using namespace std; typedef long long ll; struct Node{ int key,x,y; }a[MAX]; int b[MAX]; bool cmp(Node a,Node b){ if(a.y==b.y) return a.key<b.key; return a.y<b.y; } int main() { int t,n,m,x,y,i,j,k; scanf("%d%d",&n,&m); for(i=1;i<=n;i++){ b[i]=i; } t=0; for(i=1;i<=m;i++){ scanf("%d%d%d",&a[i].key,&a[i].x,&a[i].y); a[i].y+=a[i].x; t=max(t,a[i].y); } sort(a+1,a+m+1,cmp); for(i=1;i<=t;i++){ //枚举时间 for(j=1;j<=m;j++){ //先还 if(a[j].y==i){ for(k=1;k<=n;k++){ if(!b[k]){ b[k]=a[j].key; break; } } } } for(j=1;j<=m;j++){ //后取 if(a[j].x==i){ for(k=1;k<=n;k++){ if(b[k]==a[j].key){ b[k]=0; break; } } } } } for(i=1;i<=n;i++){ if(i>1) printf(" "); printf("%d",b[i]); } return 0; }
201709-3 JSON查询
201709-4 通信网络
//正反向存图遍历
#include#define MAX 1005 #define MOD 1000000007 using namespace std; typedef long long ll; vector<int> v[MAX],rv[MAX]; int b[MAX],rb[MAX]; void dfs(int x){ b[x]=1; for(int i=0;i ){ int to=v[x][i]; if(b[to]) continue; dfs(to); } } void rdfs(int x){ rb[x]=1; for(int i=0;i ){ int to=rv[x][i]; if(rb[to]) continue; rdfs(to); } } int main() { int t,n,m,x,y,i,j,k; scanf("%d%d",&n,&m); while(m--){ scanf("%d%d",&x,&y); v[x].push_back(y); rv[y].push_back(x); } int ans=0; for(i=1;i<=n;i++){ memset(b,0,sizeof(b)); memset(rb,0,sizeof(rb)); dfs(i); rdfs(i); int f=0; for(j=1;j<=n;j++){ if(b[j]||rb[j]) continue; f=1; break; } if(f==0) ans++; } printf("%d\n",ans); return 0; }
第十二次认证
201712-1 最小差值
#include#define MAX 1005 #define MOD 1000000007 using namespace std; typedef long long ll; int a[MAX]; int main() { int t,n,m,x,y,i,j,k; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&a[i]); } int ans=INT_MAX; for(i=1;i ){ for(j=i+1;j<=n;j++){ ans=min(ans,abs(a[i]-a[j])); } } printf("%d\n",ans); return 0; }
201712-2 游戏
//vector存储%处理环形报数删点
#include#define MAX 1005 #define MOD 1000000007 using namespace std; typedef long long ll; vector<int> v; int main() { int t,n,m,x,y,i,j,k; scanf("%d%d",&n,&k); for(i=1;i<=n;i++){ v.push_back(i); } int c=0,p=-1; while(v.size()>1){ c++;p++; p%=v.size(); if(c%k==0||c%10==k){ v.erase(v.begin()+p); p--; } } printf("%d\n",v[0]); return 0; }
201712-3 Crontab
201712-4 行车路线
//80分(错误),带权边->优先队列+bfs,用b[pos][0..1两种状态]记录当前最优解,只能用更小b更新
#include#define MAX 505 #define MOD 1000000007 using namespace std; typedef long long ll; struct Node{ int x,s,p; friend bool operator<(Node a,Node b){ if(a.s==b.s) return a.p>b.p; return a.s>b.s; } }no; priority_queue q; int a[MAX][MAX]; int p[MAX][MAX]; int b[MAX][2]; int main() { int t,n,m,x,y,z,i,j,k; scanf("%d%d",&n,&m); memset(a,-1,sizeof(a)); while(m--){ scanf("%d%d%d%d",&t,&x,&y,&z); a[x][y]=z;a[y][x]=z; p[x][y]=t;p[y][x]=t; } for(i=2;i<=n;i++){ b[i][0]=1000001; b[i][1]=1000001; } b[1][0]=0;b[1][1]=0; no.x=1;no.s=0;no.p=0; q.push(no); int ans=1000001; while(q.size()){ Node f=q.top(); q.pop(); for(i=1;i<=n;i++){ if(a[f.x][i]==-1) continue; ll ts; if(p[f.x][i]==0) ts=f.s+a[f.x][i]; else{ if(f.p==0) ts=f.s+a[f.x][i]*a[f.x][i]; else ts=(sqrt(f.s)+a[f.x][i])*(sqrt(f.s)+a[f.x][i]); } if(ts>=b[i][p[f.x][i]]) continue; b[i][p[f.x][i]]=ts; if(i==n){ ans=min(ans,(int)ts); continue; } no.x=i;no.s=ts;no.p=p[f.x][i]; q.push(no); } } printf("%d\n",ans); return 0; }
第十三次认证
201803-1 跳一跳
#include#define MAX 1005 #define MOD 1000000007 using namespace std; typedef long long ll; int main() { int t,n,m,x,y,i,j,k; int c=0,ans=0; while(~scanf("%d",&n)&&n>0){ if(n==1){ c=0; ans++; } else{ c+=2; ans+=c; } } printf("%d\n",ans); return 0; }
201803-2 碰撞的小球
//规律可视为小球间无碰撞(交叉通行),最后按相对大小的初始顺序输出
#include#define MAX 105 #define MOD 1000000007 using namespace std; typedef long long ll; struct Node{ int x,i; }a[MAX],b[MAX]; bool cmp1(Node a,Node b){ return a.x<b.x; } bool cmp2(Node a,Node b){ return a.i<b.i; } int main() { int t,l,n,m,x,y,i,j,k; scanf("%d%d%d",&n,&l,&t); for(i=1;i<=n;i++){ scanf("%d",&a[i].x); a[i].i=i; if(a[i].x+t<=l){ b[i].x=a[i].x+t; continue; } int p=t-(l-a[i].x); if((p/l)&1){ b[i].x=p%l; } else{ b[i].x=l-p%l; } } sort(a+1,a+n+1,cmp1); sort(b+1,b+n+1,cmp1); for(i=1;i<=n;i++){ b[i].i=a[i].i; } sort(b+1,b+n+1,cmp2); for(i=1;i<=n;i++){ if(i>1) printf(" "); printf("%d",b[i].x); } return 0; }
201803-3 URL映射
201803-4 棋局评估
第十四次认证
201809-1 卖菜
201809-2 买菜
201809-3 元素选择器
201809-4 再卖菜
第十五次认证
201812-1 小明上学
201812-2 小明放学
201812-3 CIDR合并
201812-4 数据中心
第十六次认证
201903-1 小中大
201903-2 二十四点
201903-3 损坏的RAID5
201903-4 消息传递接口
第十七次认证
201909-1 小明种苹果
201909-2 小明种苹果(续)
201909-3 字符画
201909-4 推荐系统
第十八次认证
201912-1 报数
201912-2 回收站选址
201912-3 化学方程式
201912-4 区块链
第十九次认证
第二十次认证
待更