CodeForces Goodbye 2017
傳送門
A - New Year and Counting Cards
?題意
有n張牌,正面有字母,反面有數字
其中元音字母$a,e,o,i,u$的另一面必須對應$0,2,4,6,8$的偶數
其他字母可以和任意數字對應
問至少檢查幾次可以使這n張牌合法
?思路
由于偶數可以對應任何牌,但奇數必須對應不是元音的字母,所以所有的奇數要檢查
由于元音字母只可以對應偶數,其他字母可以對應任意的數,所以元音字母要檢查
記錄元音字母+奇數的個數
?代碼
1 #include<bits/stdc++.h> 2 using namespace std; 3 string s; 4 int main() 5 { 6 cin>>s; 7 int num=0; 8 for(int i=0;i<s.length();i++) 9 { 10 int a=s[i]-'0'; 11 if(((a&1)&&a>0&&a<10)||s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u') 12 num++; 13 } 14 printf("%d\n",num); 15 } View Code?
B.New Year and Buggy Bot
?題意
給一個迷宮,其中$S$代表起點,$E$代表終點,$#$代表障礙物,#.#代表道路
$0,1,2,3$代表上下左右四個方位(順序不一定),
給定一個序列,問按照序列走,從起點到終點一共多少種走法
?思路
對$0,1,2,3$進行全排列,第1,,2,3,4個位置分別代表上下左右
記錄從起點到終點的方案數
?代碼
1 #include<bits/stdc++.h> 2 using namespace std; 3 char s[55][55]; 4 char t[105]; 5 int a[4]={0,1,2,3}; 6 int num=0; 7 int n,m; 8 struct node 9 { 10 int x,y; 11 }st,en; 12 void solve(int u,int d,int l,int r) 13 { 14 int len=strlen(t+1); 15 int x=st.x,y=st.y; 16 for(int i=1;i<=len;i++) 17 { 18 int now=t[i]-'0'; 19 if(now==u) 20 x--; 21 else if(now==d) 22 x++; 23 else if(now==l) 24 y--; 25 else if(now==r) 26 y++; 27 28 if(s[x][y]=='#'||x<1||x>n||y<1||y>m) 29 return ; 30 if(x==en.x&&y==en.y) 31 { 32 num++; 33 return ; 34 } 35 } 36 } 37 int main() 38 { 39 scanf("%d%d",&n,&m); 40 for(int i=1;i<=n;i++) 41 scanf("%s",s[i]+1); 42 for(int i=1;i<=n;i++) 43 { 44 for(int j=1;j<=m;j++) 45 { 46 if(s[i][j]=='S') 47 st={i,j}; 48 if(s[i][j]=='E') 49 en={i,j}; 50 } 51 } 52 scanf("%s",t+1); 53 do 54 { 55 solve(a[0],a[1],a[2],a[3]); 56 }while(next_permutation(a,a+4)); 57 58 printf("%d\n",num); 59 } View Code?
C - New Year and Curling
?題意
有n個實心圓在無窮遠處,給出他們圓心的橫坐標
現從無窮遠處按照從1到n的順序,往x軸推圓
由于圓是實心的,所以不能相交
問推完后每個圓的圓心的y坐標
?思路
一個圓不能再推動的前提是
①推到了x軸
②與其他圓相切
?與其他圓相切的時候,只要一相切就不會再動了,也就是不能繞過相切早的去和晚的相切
可以假設可以都可以推到x軸,然后挨個去找前面可以和他相切的
注意找的是y坐標最大的,也就是相切最早的那一個
y坐標可以這么計算出 $h=(2r)^{2}-d^2$ (其中$d=a[i]-a[j]$) ,于是$b[j]=b[i]+h$
?代碼
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,r; 4 int L,R; 5 int a[1005]; 6 double b[1005]; 7 int main() 8 { 9 scanf("%d%d",&n,&r); 10 for(int i=1;i<=n;i++) 11 scanf("%d",a+i); 12 for(int i=1;i<=n;i++) 13 { 14 b[i]=1.0*r; 15 for(int j=1;j<i;j++) 16 { 17 int d=a[i]-a[j]; 18 b[i]=max(b[i],b[j]+sqrt(4*r*r-d*d)); 19 } 20 } 21 for(int i=1;i<=n;i++) 22 printf("%.10f ",b[i]); 23 } View Code?
轉載于:https://www.cnblogs.com/MMMinoz/p/11616206.html
總結
以上是生活随笔為你收集整理的CodeForces Goodbye 2017的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络流建模汇总
- 下一篇: 最大权闭合子图(最小割)