Educational Codeforces Round 10 A B题、
A. Gabriel and Caterpillar
题意: 就是说 一个小孩子去观察毛毛虫从 h1的地方爬到h2的地方、毛毛虫从10点爬到22点、每小时爬的距离是a, 晚上22点到第二天早上10点 毛毛虫休息 每小时下落b距离、但是最初状态是那个小孩子从14点开始观察毛毛虫的, 必须过了24点才算一天
思路:模拟、但细节地方要注意
hint:但你要知道什么情况下永远也爬不上去,就是说每小时下落比每小时上升的距离大呢,但这还有个细节, 就是即使b>a 但毛毛虫是先可以爬10个小时,如果在这10个小时内爬到了h2 也就是说 及时b>a它也可以爬到
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 int main() 5 { 6 int n,m; 7 int a,b; 8 while(~scanf("%d%d%d%d",&n,&m,&a,&b)){ 9 int ans=m-n; 10 int flag=1; //标记变量、记录是否能爬到终点 11 int distance=0; 12 int time=0; 13 distance+=a*8; 14 if(distance<ans){ 15 while(1){ 16 distance-=b*12; //休息 17 ++time; // 休息时间过了24点、 所以算一天 18 distance+=a*12; 19 if(distance>=ans) break; 20 if(b>=a){ //直接在循环里面判断、 因为前面可以爬的10小时可以到终点的话 21 flag=0; // 也就不会进循环了 22 break; 23 } 24 } 25 } 26 if(!flag) printf("-1\n"); 27 else printf("%d\n",time); 28 } 29 }
B. z-sort
题意:先给你一个数列、问用着数列的数是否可以组成一个 对于数列中每一个偶数项 存在ai ≥ ai - 1、对于每一个奇数项 存在ai ≤ ai - 1思路:我是这样想的、既然要满足两个条件、 那么对于从前到后的奇数项来说是一个非递减的,对前到后的偶数项来说是一个非递增的、
那么对于所给的数列、 排一个序,然后贪心,具体看代码吧
1 #include<cmath> 2 #include<cstring> 3 #include<iostream> 4 #include<cstdio> 5 #include<algorithm> 6 using namespace std; 7 int num[1005]; 8 int main() 9 { 10 int n;scanf("%d",&n); 11 for(int i=1;i<=n;++i) 12 scanf("%d",&num[i]); 13 sort(num+1,num+n+1); 14 int ans[1005]; 15 int add,dre; 16 add=1; 17 dre=n; 18 for(int i=1;i<=n;++i) //构造这样一个数列 19 if(i%2==0) 20 ans[i]=num[dre--]; 21 else 22 ans[i]=num[add++]; 23 int flag=1; 24 // for(int i=1;i<=n;++i) 25 // printf("%d ",ans[i]); 26 // printf("\n"); 27 for(int i=2;i<=n;++i) //判断构造的数列是否满足条件 28 if(i%2==0){ 29 if(ans[i]<ans[i-1]) flag=0; 30 } 31 else 32 if(ans[i]>ans[i-1]) flag=0; 33 if(!flag) printf("Impossible"); 34 else for(int i=1;i<=n;++i) printf("%d ",ans[i]); 35 printf("\n"); 36 return 0; 37 }
C D 题意其实都看懂了、 就是做不出来 好气好气阿,
读题方面比以前好一点了、
继续努力吧、