ECJTUACM16 Winter vacation training #4 题解&源码
Posted Angel_Kitty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECJTUACM16 Winter vacation training #4 题解&源码相关的知识,希望对你有一定的参考价值。
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 题解&源码的主要内容,如果未能解决你的问题,请参考以下文章