Codeforces Round #387 (Div. 2)
来源:互联网 发布:vb.net socket 多线程 编辑:程序博客网 时间:2024/05/18 17:01
这段时间因为工作轻松一些,所以重新开始打codeforces了。
不过成绩挺让人心寒的。
A.水题,签到
#include<stdio.h>#include<string.h>int ab(int x,int y){ if(x-y>0) return x; else return y;}int main(){ int n,a,b; scanf("%d",&n); a=1; b=n; for(int i=1;i<=n/2;i++) { if(n%i==0) { int t1,t2; t1=i; t2=n/i; if(ab(t1,t2)<ab(a,b)) { a=t1<t2?t1:t2; b=t1<t2?t2:t1; } } } printf("%d %d\n",a,b); return 0;}
B.水题,签到
#include<stdio.h>#include<string.h>#define N 300int main(){ int n; char s[N]; while(scanf("%d",&n)!=EOF) { scanf("%s",s); if(n%4!=0) { printf("===\n"); continue; } int target=n/4; int t1,t2,t3,t4; t1=t2=t3=t4=0; for(int i=0;s[i]!='\0';i++) { if(s[i]=='A') t1++; else if(s[i]=='C') t2++; else if(s[i]=='G') t3++; else if(s[i]=='T') t4++; } t1=target-t1; t2=target-t2; t3=target-t3; t4=target-t4; if(t1<0||t2<0||t3<0||t4<0) { printf("===\n"); continue; } int cnt1,cnt2,cnt3,cnt4; cnt1=cnt2=cnt3=cnt4=0; for(int i=0;i<n;i++) { if(s[i]=='A') { ; }else if(s[i]=='C') { ; }else if(s[i]=='G') { ; }else if(s[i]=='T') { ; }else { if(cnt1<t1) { s[i]='A'; cnt1++; }else if(cnt2<t2) { s[i]='C'; cnt2++; }else if(cnt3<t3) { s[i]='G'; cnt3++; }else if(cnt4<t4) { s[i]='T'; cnt4++; } } printf("%c",s[i]); } printf("\n"); } return 0;}
C.记录服务器使用的截止时间。时限比较宽。
#include<stdio.h>#include<string.h>#define N 105int server[N];int n,q;int check(int t,int k,int d){int count=0;for(int i=1;i<=n;i++){if(server[i]<=t){count++;}}if(count<k)return -1;int ans=0;count=0;for(int i=1;i<=n;i++){if(server[i]<=t){ans+=i;server[i]=t+d;count++;}if(count==k){return ans;}}return ans;}int main(){while(scanf("%d%d",&n,&q)!=EOF){memset(server,0,sizeof(server));for(int i=1;i<=q;i++){int t,k,d;scanf("%d%d%d",&t,&k,&d);int ans=check(t,k,d);printf("%d\n",ans);}}return 0;}
D.排序,优先填中间的坑,对两头做特殊处理。
#include<stdio.h>#include<string.h>#include<stdlib.h>#define N 200005int day[N],minus[N];int cmp(const void *a,const void *b){return *(int *)a-*(int *)b;}int main(){int n,q;while(scanf("%d%d",&n,&q)!=EOF){int count=0;for(int i=1;i<=n;i++){scanf("%d",&day[i]);if(day[i]<0) count++;}if(count>q){printf("-1\n");continue;}else if(count==0){printf("0\n");continue;}int left=q-count;int k=0;int current=0;day[n+1]=-1;for(int i=1;i<=n+1;i++){if(day[i]<0) {minus[k++]=i-current-1; current=i; }}qsort(minus+1,k-2,sizeof(minus[0]),cmp);int ans=0;for(int i=1;i<k-1;i++){if(minus[i]==0) continue;if(left>=minus[i]){left-=minus[i];continue;}ans+=2;}ans+=2;if(minus[k-1]<=left) ans--;printf("%d\n",ans);}return 0;}
E.分割字符串,建树。dfs获取树的深度,bfs按层输出。
怎么申请内存让我搞了好久。
输出那部分写的特别丑。
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#define N 1000005char s_in[N],temp[N];char **s;int edge[N],next[N],head[N],vis[N],stack[N];int cnt;struct node{ int id; int no;};void addEdge(int x,int y){ edge[cnt]=y;next[cnt]=head[x];head[x]=cnt++; return ;}int my_spilt(){ struct node q[N]; int k=1; int index=0; int h,t; s=(char **)malloc(sizeof(char *)*N); h=t=0; q[t].id=0; q[t++].no=N; int flag=0; for(int i=0;s_in[i]!='\0';i++) { if(s_in[i]!=',') { temp[index++]=s_in[i]; }else { temp[index]='\0'; if(!flag) { s[k]=(char *)malloc(sizeof(char *)*(index+1)); strcpy(s[k],temp); q[t].id=k; while(q[t-1].no==0) t--; q[t-1].no--; addEdge(q[t-1].id,k++); }else { int no=atoi(temp); q[t++].no=no; } flag=(flag+1)%2; index=0; } } return 0;}int dfs(int father,int deep){ int ans=deep-1; for(int i=head[father];i!=-1;i=next[i]) { int son=edge[i]; if(vis[son]) continue; vis[son]=1; int temp=dfs(son,deep+1); ans=temp>ans?temp:ans; } return ans;}int bfs(){ struct node q[N]; int h,t; h=t=0; q[t].id=0; q[t++].no=0; int count=0; stack[count++]=-1; int current=0; while(h!=t) { struct node cur=q[h++]; if(cur.no==current+1) { stack[count++]=-1; current++; } for(int i=head[cur.id];i!=-1;i=next[i]) { int son=edge[i]; if(vis[son]) continue; vis[son]=1; q[t].id=son; q[t++].no=cur.no+1; stack[count++]=son; } } return count;}int main(){ while(scanf("%s",s_in)!=EOF) { memset(head,-1,sizeof(head)); memset(next,-1,sizeof(next)); cnt=0; my_spilt(); memset(vis,0,sizeof(vis)); printf("%d\n",dfs(0,1)); memset(vis,0,sizeof(vis)); int count=bfs(); for(int i=1;i<count;i++) { if(stack[i]==-1) { for(int j=i-1;j>=0&&stack[j]!=-1;j--) { printf("%s ",s[stack[j]]); } printf("\n"); } } } return 0;}
0 0
- Codeforces Round #387 (Div. 2)
- Codeforces Round #387 (Div. 2)
- Codeforces Round #387 (Div. 2)
- Codeforces Round #387 (Div. 2)
- Codeforces Round #387 (Div. 2)
- Codeforces Round #387 (Div. 2)
- Codeforces Round #387 (Div. 2) A---D
- Codeforces Round #387 (Div. 2) E. Comments
- Codeforces Round #387 (Div. 2) C. Servers
- Codeforces Round #387 (Div. 2) Servers
- Codeforces Round #387 (Div. 2) E. Comments
- Codeforces Round #387 (Div. 2) C
- Codeforces Round #387 (Div. 2) A
- Codeforces Round #387 (Div. 2) C. Servers
- Codeforces Round #102 (Div. 2)
- Codeforces Round #103 (Div. 2)
- Codeforces Round #103 (Div. 2)
- Codeforces Round #104 (Div. 2)
- 循环链表
- Apache Cordova 在Android Studio中使用心得
- 有关eclipse不识别手机的问题
- babel startWith 问题
- android:ellipsize的使用
- Codeforces Round #387 (Div. 2)
- Spark算子:RDD创建操作
- (概率)hpu 1154: 两堆硬币 [数学]
- 【微信开源热修复框架】
- 二分查找
- 自建framework提交审核报错 ERROR ITMS-90087解决办法
- CSS学习笔记:overflow-wrap(word-wrap)
- 泛型委托,匿名委托,lamda表达语句,lamda表达式
- CGI与ECGI组成介绍