第一次打codeforces,打得不行。
A. Vitya in the Countryside
简单题,给出一串序列,0,1,2...,14,15,14,...2,1,0,1 判断之后是增加还是减少,无法判断输-1
题意就很简单,但是由于网络问题,这题一直没加载出来,直到30分钟的时候才出来,好气啊。
#include <bits/stdc++.h> using namespace std; int main(){ int n,a,b,t; scanf("%d",&n); if(n==1){ scanf("%d",&t); if(t==0) puts("UP"); if(t==15) puts("DOWN"); if(t!=0&&t!=15) puts("-1"); } else{ for(int i=1;i<=n-2;i++) scanf("%d",&t); scanf("%d%d",&a,&b); string ans=""; if(b>a){ if(b==15) ans="DOWN"; else ans="UP"; } if(b<a){ if(b==0) ans="UP"; else ans="DOWN"; } cout<<ans<<endl; } return 0; }
B. Anatoly and Cockroaches
n个蝗虫,共两种颜色,要求摆出rbr...或者brb...这种交错的样子,可以交换任意俩,或者改变一个的颜色,求操作最小次数。
即求 原序列与 rbrb.... brbr.....相差的个数中小的那个。
#include <bits/stdc++.h> using namespace std; char ch[111111],tmp[111111]; int main(){ int n; scanf("%d\n",&n); for(int i=1;i<=n;i++) scanf("%c",&ch[i]); int t1=0,t2=0; for(int i=1;i<=n;i++){ if(i%2==1) if(ch[i]==‘b‘) t1++; if(i%2==0) if(ch[i]==‘r‘) t2++; } int ans=max(t1,t2); t1=0,t2=0; for(int i=1;i<=n;i++){ if(i%2==1) if(ch[i]==‘r‘) t1++; if(i%2==0) if(ch[i]==‘b‘) t2++; } ans=min(ans,max(t1,t2)); printf("%d\n",ans); return 0; }
C.
给一个数字,可以查看t次,每次查看可以四舍五入。算法就是贪心,五入小数点后最前面的以为大于等于5的,然后进位就好了。
#include <bits/stdc++.h> using namespace std; const int MAXN = 200000 + 5; int T, N, M; char buf[MAXN]; int dot, pos; inline bool finish() { return (dot == -1 || pos == -1); } int main() { while(~scanf("%d %d", &N, &T)) { scanf("%s", buf); bool overflow = false; dot = -1, pos = -1; for(int i = 0; buf[i]; i++) { if(buf[i] == ‘.‘) { dot = i; break; } } for(int i = dot + 1; buf[i]; i++) { if(buf[i] >= ‘5‘) { pos = i; buf[i + 1] = ‘\0‘; break; } } while(T --) { if(finish()) break; if(buf[dot + 1] >= ‘5‘) { buf[dot + 1] = buf[dot] = ‘\0‘; int j = dot - 1; while(j >= 0 && buf[j] == ‘9‘) { buf[j] = ‘0‘; j --; } if(j < 0 && buf[j + 1] == ‘0‘) overflow = true; else buf[j] ++; break; } buf[pos] = ‘\0‘; buf[pos - 1] ++; if(buf[pos - 1] < ‘5‘) pos = -1; else pos --; } if(overflow) printf("1"); printf("%s\n", buf); } return 0; }
时间: 2024-10-17 20:02:26