Codeforces AIM Tech Round3
Posted wolf940509
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces AIM Tech Round3相关的知识,希望对你有一定的参考价值。
打得最烂一场Codeforces,多次都错题,无限WA。。。
A题:
题意:给定n个橘子的大小,大小超过b的丢掉,不足d的补充进来,同时超过d的部分去掉,问要去掉几次
分析:直接模拟即可
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 const int maxn=100020; 15 int a[maxn]; 16 int n,b,d; 17 int main() 18 { 19 while(cin>>n>>b>>d) 20 { 21 for(int i=0;i<n;i++) 22 scanf("%d",&a[i]); 23 vector<int> que; 24 for(int i=0;i<n;i++) 25 { 26 if(a[i]<=b) 27 que.push_back(a[i]); 28 } 29 queue<int> q; 30 while(!q.empty()) 31 q.pop(); 32 int cnt=0; 33 for(int i=0;i<que.size();i++) 34 { 35 int t=que[i]; 36 q.push(t); 37 } 38 while(!q.empty()) 39 { 40 int h=q.front(); 41 q.pop(); 42 while(h<=d) 43 { 44 if(q.empty()) break; 45 int f=q.front(); 46 q.pop(); 47 h+=f; 48 if(h>d) 49 { 50 cnt++; 51 break; 52 } 53 } 54 } 55 cout<<cnt<<endl; 56 } 57 return 0; 58 }
B题:
题意:给定n个点的坐标,同时给定一个点的坐标,求这个点到达其中n-1个点的最短路径
分析:因为必将到达a[n-1]或者a[0],所以我们先将n个点的坐标进行排序,然后比较覆盖a[n-1]和a[0]的所有情况下的最小值,注意n=1的时候结果为0
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 const int maxn=100010; 15 int a[maxn]; 16 int n,d; 17 int main() 18 { 19 while(cin>>n>>d) 20 { 21 for(int i=0;i<n;i++) 22 scanf("%d",&a[i]); 23 if(n==1){ 24 cout<<"0"<<endl; 25 continue; 26 } 27 sort(a,a+n); 28 int h=1<<30; 29 int cnt=1<<30; 30 if(d<=a[0]) 31 { 32 cout<<abs(a[n-2]-d)<<endl; 33 continue; 34 }else if(a[n-1]<=d) 35 { 36 cout<<abs(a[1]-d)<<endl; 37 continue; 38 } 39 if(d>=a[0]&&d<=a[1]) 40 { 41 h=abs(a[n-1]-d); 42 } 43 if(d<=a[n-1]&&d>=a[n-2]) 44 { 45 h=min(h,abs(a[0]-d)); 46 } 47 cnt=min(cnt,2*(abs(a[0]-d))+abs(a[n-2]-d)); 48 cnt=min(cnt,2*(abs(a[n-2]-d))+abs(a[0]-d)); 49 cnt=min(cnt,2*(abs(a[n-1]-d))+abs(a[1]-d)); 50 cnt=min(cnt,2*(abs(a[1]-d))+abs(a[n-1]-d)); 51 cout<<min(h,cnt)<<endl; 52 } 53 return 0; 54 }
C题:
题意:给定一个字符串,然后对于其中的一个子串进行如下变化,每个字母变成它的前一个字母,a变成z,求变化以后字典序最小
分析:开始不理解字典序,后来知道就是让排在前面的数尽量小。这样就可以贪心,对于排在尽量靠前不含有a的子串进行变化,若全是a,则将最后一个a变成z即可。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 string s; 15 int main() 16 { 17 while(cin>>s) 18 { 19 int n=s.length(); 20 int flag=0; 21 for(int i=0;i<n;i++) 22 { 23 if(s[i]!=\'a\') 24 { 25 flag=1; 26 s[i]=s[i]-1; 27 }else if(s[i]==\'a\'&&flag) 28 { 29 break; 30 } 31 } 32 if(flag) 33 { 34 for(int i=0;i<n;i++) 35 printf("%c",s[i]); 36 }else{ 37 for(int i=0;i<n-1;i++) 38 printf("%c",s[i]); 39 printf("z"); 40 } 41 printf("\\n"); 42 } 43 return 0; 44 }
以上是关于Codeforces AIM Tech Round3的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces_AIM Tech Round 3 (Div. 1)_B
Codeforces Aim Tech Round4 (Div2) D
codeforces708b// Recover the String //AIM Tech Round 3 (Div. 1)