Codeforces Round #424 (Div. 2)
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #424 (Div. 2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
D題fst了,生無可戀。第二場rated的CF,打得精神恍惚
A. Unimodal Array 題意:判斷數列是否是單峰的。 像題意那樣分為三個階段隨便判一判就好了 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; int n,x[105],part=1; bool f=1; int main() {scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&x[i]);if(part==1){if(x[i]==x[i-1])part=2;else if(x[i]<x[i-1])part=3;}else if(part==2){if(x[i]<x[i-1])part=3;else if(x[i]>x[i-1]){f=0;break;}}else if(part==3){if(x[i]>x[i-1]){f=0;break;}else if(x[i]==x[i-1]){f=0;break;}}}if(f)printf("YES\n");else printf("NO\n");return 0; } B. Keyboard Layouts 題意:給出一個26個字母的對應方式, 將給定串由模式1轉為模式2 模擬,判斷一下大小寫 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; char a[26],b[26],s[1001]; int map[26]; int main() {scanf("%s%s%s",a,b,s);for(int i=0;i<26;i++)map[a[i]-'a']=b[i]-'a';for(int i=0;i<strlen(s);i++){if(s[i]>='a'&&s[i]<='z')cout<<(char)(map[(int)(s[i]-'a')]+'a');else if(s[i]>='A'&&s[i]<='Z')cout<<(char)(map[(int)(s[i]-'A')]+'A');else cout<<s[i];}return 0; } D. Office Keys 題意:給出n個人,k把鑰匙,和辦公室所在位置,每個人都需拿到一把鑰匙再去辦公室,最小化他們之中的最大路程 沒錯…這題我fst了,二分邊界開小了,并且某處忘記了j++,心痛 二分答案,然后貪心思路:直覺上可以知道人與鑰匙一一對應是從左到右的,根據這點判斷是否可行 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> typedef long long LL; int n,k,p,a[1005],b[2005]; using namespace std; LL dis(LL x,LL y){return abs(y-x)+abs(p-y);} bool check(LL mid) {int j=1;for(int i=1;i<=n;i++,j++){while(j<=k&&dis(a[i],b[j])>mid)++j;if(j>k)return false;}return true; } int main() {scanf("%d%d%d",&n,&k,&p);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=k;i++)scanf("%d",&b[i]);sort(a+1,a+1+n),sort(b+1,b+1+k);LL l=0,r=2000000000,ans;while(l<=r){LL mid=(l+r)>>1;if(check(mid))ans=mid,r=mid-1;else l=mid+1;}printf("%I64d\n",ans);return 0; }轉載于:https://www.cnblogs.com/Zars19/p/7173064.html
總結
以上是生活随笔為你收集整理的Codeforces Round #424 (Div. 2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《C程序设计语言》笔记 (五) 指针与数
- 下一篇: 软件工程实践2017结对第二次作业