A. Unimodal Array 题目链接:点击
题意:给定一个数组 问这个数组是不是先严格上升然后恒定然后严格下降
根据样例可以推测 这三个过程是可以只存在部分过程 例如【1,2,2】【2,2,1】【1,2,1】【1,1,1】均为符合要求的。
瞎搞
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int main() 6 { 7 int n; 8 cin>>n; 9 int a[123]; 10 for(int i=0;i<n;i++) 11 { 12 cin>>a[i]; 13 } 14 int ans = 0; 15 int cnt = 0; 16 for(int i=1;i<n;i++) 17 { 18 if(cnt == 1 &&a[i]>a[i-1]) 19 { 20 ans = 1; 21 break; 22 } 23 if(cnt == 2 &&a[i]>=a[i-1]) 24 { 25 ans = 1; 26 break; 27 } 28 if(cnt == 0 && a[i]==a[i-1]) 29 cnt = 1; 30 if(cnt != 2 && a[i]<a[i-1]) 31 cnt = 2; 32 } 33 if(ans) cout<<"NO"<<endl; 34 else cout<<"YES"<<endl; 35 return 0; 36 }
B. Keyboard Layouts 题目链接:点击
题意:给你26个字母的对应关系 对于给定的字符串 求转换后的字符串(转换后不改变大小写,非字母不转换)
用map感觉很方便
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int main() 6 { 7 map<char,char>mape; 8 string a,b; 9 cin>>a>>b; 10 for(int i=0;i<26;i++) 11 { 12 mape[a[i]] = b[i]; 13 } 14 string cnt; 15 cin>>cnt; 16 string ans=""; 17 for(int i=0;i<(int)cnt.size();i++) 18 { 19 if(cnt[i]>='a'&&cnt[i]<='z') 20 { 21 ans += mape[cnt[i]]; 22 } 23 else if(cnt[i]>='A'&&cnt[i]<='Z') 24 { 25 ans += mape[cnt[i]-'A'+'a']-'a'+'A'; 26 } 27 else 28 { 29 ans+=cnt[i]; 30 } 31 } 32 cout<<ans<<endl; 33 return 0; 34 }
C. Jury Marks 题目链接:点击
题意:K个评委 每个评委都打分,Polycarp只听到部分某评委打分后的结果。求初始分数可能的个数是多少。
先把评委的打分前缀和一下 然后枚举暴力就好了 注意map查找key是否存在的时候一定不要map[key]=value; 太耗时了,算是涨了见识。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 map<int ,int> c; 5 map<int ,int> ans; 6 int main() 7 { 8 int num[2111]; 9 int nn[2111]; 10 int n,k; 11 cin>>k>>n; 12 for(int i=1;i<=k;i++) 13 cin>>num[i]; 14 for(int i=2;i<=k;i++) 15 num[i]=num[i]+num[i-1]; 16 for(int i=1;i<=n;i++) 17 cin>>nn[i]; 18 for(int i=1;i<=k;i++) 19 { 20 int count = 0; 21 for(int j=2;j<=n;j++) 22 c[nn[j]]=1; 23 int cc = nn[1]-num[i]; 24 for(int j=1;j<=k;j++) 25 { 26 if(i==j) continue; 27 map<int,int>::iterator it = c.find(cc+num[j]); 28 if(it!=c.end()) 29 { 30 count ++; 31 c.erase(it); 32 } 33 } 34 if(count == n-1) 35 ans[cc] = 1; 36 } 37 cout<<(int)ans.size()<<endl; 38 return 0; 39 }
D. Office Keys 题目链接:点击
题意:在一条直线上有三种元素 人 钥匙 办公室 要求所有人拿到钥匙然后进入办公室 问所有人进入办公室最低需要的时间。
将人和钥匙排序之后 暴力N个人取连续的N把钥匙
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int pd(int a,int b,int c) 6 { 7 return abs(b-c)+abs(c-a); 8 } 9 10 int main() 11 { 12 int person[1234]; 13 int key[2345]; 14 int n,k,p; 15 cin>>n>>k>>p; 16 for(int i=0;i<n;i++) 17 cin>>person[i]; 18 sort(person,person+n); 19 for(int i=0;i<k;i++) 20 cin>>key[i]; 21 sort(key,key+k); 22 int maxe = 2100000000; 23 for(int i=0;i<=k-n;i++) 24 { 25 int cnt = 0; 26 for(int j = 0; j<n;j++) 27 { 28 int len = pd(p,person[j],key[i+j]); 29 cnt = max(cnt,len); 30 } 31 maxe = min(maxe,cnt); 32 } 33 cout<<maxe<<endl; 34 return 0; 35 }
来源:https://www.cnblogs.com/tfatdos/p/7168684.html