2020年3月28日UCF Local Programming Contest 2016
程序员文章站
2022-04-15 13:41:07
A. Majestic 10 题意:给你三个数,要你判断三个数中有多少个数是大鱼等于10的,并根据数量打印相关输出即可 题解:这是一道简单的签到题,简单。 代码: 1 #include 2 #include 3 #include 4 #de ......
题意:给你三个数,要你判断三个数中有多少个数是大鱼等于10的,并根据数量打印相关输出即可
题解:这是一道简单的签到题,简单。
代码:
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #define ll long long 5 using namespace std; 6 int main(){ 7 ll n; 8 cin>>n; 9 while(n--){ 10 int num=0,t; 11 int cnt[3]={0},tt=0; 12 for(int i=0;i<3;i++){ 13 cin>>t; 14 cnt[tt++]=t; 15 if(t>=10){ 16 num++; 17 } 18 } 19 for(int i=0;i<tt;i++){ 20 cout<<cnt[i]; 21 if(i<tt-1){ 22 cout<<" "; 23 }else{ 24 cout<<endl; 25 } 26 } 27 if(num==0){ 28 cout<<"zilch"<<endl; 29 }else if(num==1){ 30 cout<<"double"<<endl; 31 }else if(num==2){ 32 cout<<"double-double"<<endl; 33 }else{ 34 cout<<"triple-double"<<endl; 35 } 36 cout<<endl; 37 } 38 return 0; 39 }
题意:大概意思就是要你判断题目给出的两个字符串是不是回文串,但又有点创新,就是给出了即使两个字不同也可将其视为是相同的,这个下面的输入会给出那两个字母符合这一特性
题解:根据常规的回文串判断方法来判断即可,在遇到如果不是回文串的时候,可将两个字符串中的有“歧义”的字母都进行替换再进行比较即可。
代码:
1 #include<iostream> 2 #include<cstring> 3 #include<map> 4 #include<algorithm> 5 using namespace std; 6 #define ll long long 7 int main(){ 8 ll n,p,q; 9 string ptr1; 10 char c1,c2; 11 cin>>n; 12 int num=1; 13 while(n--){ 14 cin>>p; 15 map<char,char> mp; 16 for(int i=0;i<p;i++){ 17 cin>>c1>>c2; 18 mp[c1]=c2; 19 } 20 cin>>q; 21 cout<<"test case #"<<num<<":"<<endl; 22 num++; 23 for(int i=0;i<q;i++){//这是判断的 24 cin>>ptr1; 25 string pr=ptr1;//原始 26 string ptr2(ptr1.rbegin(),ptr1.rend()); 27 if(ptr1==ptr2){ 28 cout<<pr<<" "<<"yes"<<endl; 29 }else{ 30 for(int j=0;j<ptr2.length();j++){ 31 if(mp.count(ptr2[j])!=0){//表示存在 32 ptr2[j]=mp[ptr2[j]]; 33 } 34 } 35 for(int j=0;j<ptr1.length();j++){ 36 if(mp.count(ptr1[j])!=0){ 37 ptr1[j]=mp[ptr1[j]]; 38 } 39 } 40 if(ptr1==ptr2){ 41 cout<<pr<<" "<<"yes"<<endl; 42 }else{ 43 cout<<pr<<" "<<"no"<<endl; 44 } 45 } 46 } 47 cout<<endl; 48 } 49 return 0; 50 }
题意:大概意思就是给你一个充满冰块的棋盘,你可以对其中任何一个冰块进行敲击,冰块回随之掉落,但它的掉落会是一个连锁反应,他旁边的冰块也会掉落,除非旁边的冰块是在一个完整的行或列中,而掉落的这个冰块同样也会以同样的机理影响其他的冰块,想要你求下面给出的操作步骤有几个是多余的。
题解:这一题的意思比较简单,简单暴力模拟整个过程即可,但这个过程比较复杂,细心即可。
代码:
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 #define ll long long 6 ll d,n,x,y; 7 ll num[100][100]={0}; 8 int net[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; 9 bool check(int dx,int dy){ 10 return (dx>=1&&dy<=d)&&(dy>=1&&dy<=d); 11 } 12 int main(){ 13 ll n;//样例的数量 14 cin>>n; 15 int g=1; 16 while(n--){ 17 cin>>d>>n; 18 for(int i=1;i<=d;i++){ 19 for(int j=1;j<=d;j++){ 20 num[i][j]=1; 21 } 22 }//初始化为 1 表示这个位置还有冰块 23 ll sum=0;//存储答案 24 for(int i=0;i<n;i++){//输入每一次的操作 25 cin>>x>>y; 26 if(num[x][y]==0){//本次操作无效 27 sum++; 28 }else{//本次操作是有效的 29 num[x][y]=0;//表示这一个冰块回掉下去 ,是以它为中心开始掉落的 30 //但是它会影响它周围的冰块 31 for(int j=0;j<4;j++){ 32 int dx=x+net[j][0]; 33 int dy=y+net[j][1]; 34 if(check(dx,dy)&&num[dx][dy]==1){ 35 if(j==0){//向右移动 36 for(int r=dy;r<=d;r++){ 37 int ff=0; 38 for(int rr=1;rr<=d;rr++){ 39 if(num[rr][r]==1){ 40 ff++; 41 } 42 } 43 if(ff==d){} 44 else {//不完整 45 num[dx][r]=0; 46 } 47 } 48 }else if(j==1){//向左移动 49 for(int r=dy;r>=1;r--){ 50 int ff=0; 51 for(int rr=1;rr<=d;rr++){ 52 if(num[rr][r]==1){ 53 ff++; 54 } 55 } 56 if(ff==d){} 57 else{//不完整 58 num[dx][r]=0; 59 } 60 } 61 }else if(j==2){//向上移动 62 for(int r=dx;r<=d;r++){ 63 int ff=0; 64 for(int rr=1;rr<=d;rr++){ 65 if(num[r][rr]==1){ 66 ff++; 67 } 68 } 69 if(ff==d){} 70 else{ 71 num[r][dy]=0; 72 } 73 } 74 }else if(j==3){//向下移动 75 for(int r=dx;r>=1;r--){ 76 int ff=0; 77 for(int rr=1;rr<=d;rr++){ 78 if(num[r][rr]==1){ 79 ff++; 80 } 81 } 82 if(ff==d){} 83 else{//不完整 84 num[r][dy]=0; 85 } 86 } 87 } 88 } 89 } 90 } 91 } 92 cout<<"strategy #"<<g<<": "<<sum<<endl; 93 g++; 94 cout<<endl; 95 } 96 return 0; 97 }
题意:题意比较简单,就是要你寻找一个字符串在题目所给的字母“矩阵”中第一个字母出现的位置和方向
题解:这一题也可一简单暴力模拟这个过程,唯一的技巧就是可以对题目给出的字母“矩阵”进行翻转以达到扩大字符串长度的目的,当让扩充的长度是多少要根据题目的具体要求来,这里我将它扩大到长度为10000的字符串。
代码:
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 #define ll long long 6 int main(){ 7 ll n; 8 cin>>n; 9 ll r,c; 10 string arr; 11 ll num; 12 int g=1; 13 while(n--){//字谜的个数 14 scanf("%d %d",&r,&c);//行和列 15 char ptr[100][100]; 16 for(int i=1;i<=r;i++){ 17 for(int j=1;j<=c;j++){ 18 cin>>ptr[i][j]; 19 } 20 } 21 string ar[100],ac[100]; 22 int ir=1, ic=1; 23 for(int i=1;i<=r;i++){//这里将行连成串 ,并且用一个数组存起来 24 string temp; 25 for(int j=1;j<=c;j++){ 26 temp=temp+ptr[i][j]; 27 } 28 ar[ir++]=temp; 29 } 30 for(int i=1;i<=c;i++){//这里将列连成串 并且用一个数组存起来 31 string temp; 32 for(int j=1;j<=r;j++){ 33 temp=temp+ptr[j][i]; 34 } 35 ac[ic++]=temp; 36 } 37 cin>>num; 38 cout<<"word search puzzle #"<<g<<":"<<endl; 39 g++; 40 for(int i=0;i<num;i++){ 41 cin>>arr; 42 int front=0;//记录寻找的方向是那个 43 int x,y;//第一个字母出现的坐标 44 int f=0;//是否找到的标记 45 if(f==0){//行 顺 46 for(int j=1;j<ir;j++){//遍历每一个行元素 47 string temp; 48 while(temp.length()<=10000){ 49 temp=temp+ar[j]; 50 } 51 //下面开始寻找 52 int dis=temp.find(arr); 53 if(dis!=-1){//找到 下面就是要记录第一个位置出现的 行 和 列的坐标 54 x=j; 55 y=dis+1; 56 f=1;//标记找到 57 front=1;//向右 58 break; 59 }else{}//表示没有找到 60 } 61 } 62 if(f==0){//行 逆 63 for(int j=1;j<ir;j++){//遍历每一个行元素 64 string temp; 65 string s(ar[j].rbegin(),ar[j].rend()); 66 while(temp.length()<=10000){ 67 temp=temp+s; 68 } 69 int dis=temp.find(arr); 70 if(dis!=-1){//找到 下面的难点就是记录出现的位置 71 x=j; 72 y=s.length()-1-dis+1; 73 f=1; 74 front=2;//向左 75 break; 76 }else{}//没有 77 } 78 } 79 if(f==0){//列 顺(从上往下) 80 for(int j=1;j<ic;j++){//遍历每一个列元素 81 string temp; 82 while(temp.length()<=10000){ 83 temp=temp+ac[j]; 84 } 85 int dis=temp.find(arr); 86 if(dis!=-1){//找到 现在主要是要确定行和列的坐标 87 x=dis+1; 88 y=j; 89 front=3;//向下 90 f=1; 91 break; 92 }else{}//没找到 93 } 94 } 95 if(f==0){//列 逆 (从下往上) 96 for(int j=1;j<ic;j++){//遍历每一个 97 string temp; 98 string s(ac[j].rbegin(),ac[j].rend()); 99 while(temp.length()<=10000){ 100 temp=temp+s; 101 } 102 int dis=temp.find(arr); 103 if(dis!=-1){//找到 现在主要确定第一个字母的行和列 104 x=s.length()-1-dis+1; 105 y=j; 106 f=1; 107 front=4;//向下 108 break; 109 }else{}//没找到 110 } 111 } 112 if(front==1) cout<<"r "; 113 if(front==2) cout<<"l "; 114 if(front==3) cout<<"d "; 115 if(front==4) cout<<"u "; 116 cout<<x<<" "<<y<<" "; 117 cout<<arr<<endl; 118 }//数据输入完毕,下面开始处理数据 119 cout<<endl; 120 } 121 return 0; 122 }