码迷,mamicode.com
首页 > Windows程序 > 详细

ECJTUACM16 Winter vacation training #4 题解&源码

时间:2017-02-09 16:10:38      阅读:365      评论:0      收藏:0      [点我收藏+]

标签:c++   详解   namespace   ret   get   ++   ace   using   ons   

https://vjudge.net/contest/149692#overview 这周一VJ比赛,题解&源码已完成!

A.........................................................................................

题目链接→Codeforces Problem 712A Memory and Crow

【题意】
有n个数b1,?b2,?...,?bn

a1,?a2,?...,?an是通过等式ai?=?bi?-?bi?+?1?+?bi?+?2?-?bi?+?3....(±)bn得到的

现给你a1,?a2,?...,?an这n个数,问b1,?b2,?...,?bn是多少

详解请参看我的随笔!下面给出AC代码:

 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int n,a,b;
 6     while(cin>>n)
 7     {
 8         for(int i=1;i<=n;i++)
 9         {
10             cin>>a;
11             if(i>1)
12                 cout<<a+b<<" ";
13             b=a;
14         }
15         cout<<a<<endl;
16     }
17     return 0;
18 }

 

B.........................................................................................

题目链接→Codeforces Problem 708A Letters Cyclic Shift

【题意】
从仅有小写字母组成的字符串s中挑选出一个非空子串

将该子串中的每个字母均替换成前一个字母,如‘b‘换成‘a‘,‘c‘换成‘b‘,以此类推,特别的,‘a‘要换成‘z‘

问经过一次转换之后,字典序最小的字符串s为多少

详解请参看我的随笔!下面给出AC代码:

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int i,k=0;
 6     char s[100005];
 7     gets(s);
 8     int len=strlen(s);
 9     for(i=0;s[i]!=\0;i++)
10         if(s[i]!=a)
11             break;
12     for(;s[i]!=\0;i++)
13     {
14         if(s[i]==a)
15             break;
16         s[i]--;
17         k++;
18     }
19     if(!k)
20         s[strlen(s)-1]=z;
21     puts(s);
22     return 0;
23 }

 

C.........................................................................................

题目链接→Codeforces Problem 712B Memory and Trident

【题意】
Memory从二维坐标系的原点出发,按字符串s的指示运动

R:向右;L:向左;U:向上;D:向下

Memory最终想回到原点,问至少需要改变字符串s中的几个字符

若无论如何改变都无法回到原点,输出"-1"

 

 

详解请参看我的随笔!下面给出AC代码:

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     char s[100005];
 6     int len;
 7     int a=0,b=0,c=0,d=0;
 8     while(gets(s))
 9     {
10         len=strlen(s);
11     if(len%2==1)
12     {
13         printf("-1\n");
14     }
15     else
16     {
17         for(int i=0;s[i]!=\0;i++)
18         {
19             if(s[i]==U)
20                 a++;
21             else if(s[i]==D)
22                 b++;
23                 else if(s[i]==L)
24                     c++;
25                 else if(s[i]==R)
26                     d++;
27         }
28          printf("%d\n",(abs(a-b)+abs(c-d))/2);
29          a=b=c=d=0;
30     }
31     }
32     return 0;
33 }

 

D.........................................................................................

 

题目链接→Codeforces Problem 712C Memory and De-Evolution

【题意】
现有边长为x的等边三角形,Memory想要将其变成边长为y的等边三角形

现规定Memory每秒能够改变一条边的大小,但要保证改变后的三条边仍能构成一个三角形

问,最少需要多少时间才能变为边长为y的等边三角形

详解请参看我的随笔!下面给出AC代码:

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int s[3];
 6     int x,y,i;
 7     while(cin>>x>>y)
 8     {
 9         int ans=0;
10         s[0]=s[1]=s[2]=y;
11         for(i=0;s[0]<x||s[1]<x||s[2]<x;i++)
12         {
13             s[0]=s[1]+s[2]-1;
14             sort(s,s+3);
15             ans++;
16         }
17         cout<<ans<<endl;
18     }
19     return 0;
20 }

 

E.........................................................................................

题目链接→http://poj.org/problem?id=2352

题意:

就是求每个小星星左小角的星星的个数。坐标按照Y升序,Y相同X升序的顺序给出
由于y轴已经排好序,可以按照x坐标建立一维树状数组

详解请参看我的随笔!下面给出AC代码:

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 const int MAXN=32005;
 4 const int MINN=15005;
 5 int tree[MAXN];//下标为横坐标
 6 int level[MINN];//下标为等级数
 7 /*int lowerbit(int x)
 8 {
 9     return x&-x;
10 }*/
11 void add(int k,int num)
12 {
13     while(k<=MAXN)
14     {
15         tree[k]+=num;
16         k+=k&-k;
17     }
18 }
19 int read(int k)//1~k的区间和
20 {
21     int sum=0;
22     while(k)
23     {
24         sum+=tree[k];
25         k-=k&-k;
26     }
27     return sum;
28 }
29 int main()
30 {
31     int n,x,y,i;
32     memset(tree,0,sizeof(tree));
33     memset(level,0,sizeof(level));
34     while(scanf("%d",&n)!=EOF)
35     {
36         for(i=1;i<=n;i++)
37         {
38             scanf("%d%d",&x,&y);
39             int temp=read(x+1);//加入x+1,是为了避免0,X是可能为0的
40             level[temp]++;
41             add(x+1,1);
42         }
43         for(i=0;i<n;i++)
44             printf("%d\n",level[i]);
45     }
46     return 0;
47 }

 

 

 

ECJTUACM16 Winter vacation training #4 题解&源码

标签:c++   详解   namespace   ret   get   ++   ace   using   ons   

原文地址:http://www.cnblogs.com/ECJTUACM-873284962/p/6382280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!