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
