一.题目报告
比赛中全部0分,赛后1,2,4题AC
二.赛中概况
T1.三角形分割
用了普通判断,0分
T2.魔法塔
没排序,0分
T3.数字加倍
用了暴力 0分
T4.不合法字符串
想了很久,没想出来,0分
三.解题报告
T1.比赛时0分,比赛后100分
题目描述
小可是一名年轻有为的建筑师,他在一次勘测任务中遇到了一个有趣的问题。他来到了一个二维平面上的一个面积不为零的三角形,三角形的三个顶点分别是A、B、C。 小可想要判断是否能够在这个三角形上画一条水平或竖直的线,将这个三角形划分为两个面积不为零的三角形。 但是小可不太会写代码,请你帮助小可,使用代码实现这个功能。
输入描述
第一行:输入一个正整数 t ,表示多组测试样例的数量。
对于每组测试样例,在单独的一行中输入6个整数,�1,�1,�2,�2,�3,�3x1,y1,x2,y2,x3,y3,(��,��)(xi,yi)表示三个点的坐标。
输出描述
对于每组测试样例,如果能用一条水平或竖直的线,将这个三角形划分为两个面积不为零的三角形,则输出YES
,否则输出NO
。
输入样例
4
4 7 6 8 3 5
4 5 4 7 6 8
5 8 1 8 2 5
3 6 6 6 6 3
输出样例
YES
YES
YES
NO
数据描述
对于100%的数据:1≤t≤104,1≤x,y≤108
题目解析
若横线上和竖线上都有相等的数,输出NO,否则输出YES
AC代码:#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
for(int i=1;i<=t;i++){
int a,b,c,d,e,f;
cin>>a>>b>>c>>d>>e>>f;
int g=0;
if((a==c||a==e||c==e)&&(b==d||b==f||d==f)){
cout<<"NO"<<endl;
}else cout<<"YES"<<endl;
}
return 0;
}
T2.比赛时0分,比赛后100分
题目描述
在一个小镇上,有一座魔法塔。这座塔里有n个魔法石,每个魔法石都有一个特定的能量值。小可是一个年轻的魔法师,他梦想成为最强大的魔法师。为了实现他的梦想,他必须通过一系列的挑战来提升自己的魔法能力。
挑战的规则是这样的:在每一次挑战中,小可可以选择两个魔法石,其中一个魔法石的能量值比另一个魔法石高。然后,他可以将能量值高的魔法石的能量减少1,并将能量值低的魔法石的能量增加1。小可可以进行任意多次的挑战操作。注意,魔法石的顺序不可以改变,且能量不能小于0。
小可非常聪明,他意识到,通过巧妙地选择挑战操作,他可以使得某个魔法石的能量值变得非常高。他想知道,在经过任意多次的挑战操作后,能够使得第一个魔法石的能量值最高,请问这个最高的能量值是多少。
小可向你寻求帮助,希望你能够计算出能够达到的最高能量值。你能帮助小可解决这个问题吗?
输入描述
第1行:输入一个正整数 t ,表示多组测试样例的组数。
对于每组测试样例:
第1行:输入一个正整数 n ,表示有 n 个魔法石。
第2行:输入 n 个正整数,表示魔法石的初始能量值 �[�]a[i]。
输出描述
对于每组测试样例,输出经过任意次操作后,第一个魔法石能达到的最高能量值。
输入样例
4
3
1 2 3
3
1 2 2
2
1 1000000000
10
3 8 6 7 4 1 2 4 10 1
输出样例
3
2
500000001
9
数据描述
对于25%的数据:1≤t≤20,1≤n≤100,1≤a[i]≤103
对于100%的数据:1≤t≤20,1≤n≤104,1≤a[i]≤109
解析:
using namespace std;
int main(){
long long t,i,j,q,ma=-1;
cin>>t;
for(i=1;i<=t;i++){
long long n,a[10010];
cin>>n;
ma=-1;
for(j=1;j<=n;j++){
cin>>a[j];
}
sort(a+2,a+n+1);
for(int j=2;j<=n;j++){
if(a[1]<a[j])a[1]=(a[1]+a[j]+1)/2;
}
cout<<a[1]<<endl;
}
return 0;
}
题目描述
小可是一个数学天才,他喜欢研究数学问题。有一天,他遇到了一个有趣的问题。
问题是这样的:给定两个正整数n和x,小可需要对x进行一系列操作,使得x的位数与n相等,并且操作次数最少。每次操作,小可需要从x的十进制表示中截取一位数字y,然后将y与x相乘得到x’。例如,如果x=123,而小可截取的数字是2,则x’ = 123 * 2 = 246,之后令 x = x’ 。
输入描述
输入两个数字n 和 x ,表述如题
输出描述
输出操作次数的最小值,如果不可能,则输出-1。
我认为这道题可以用暴力,在练习赛中用了暴力求解,算例通过,没有得分
题中暴力算法代码(0分):
#include<bits/stdc++.h>
using namespace std;
int main(){
union long long n,x;
cin>>n>>x;
union long long q=x,a=pow(10,n-1),b=pow(10,n)-1;
int f=1;
while(q){
if(q%10!=1)f=0;
q/=10;
}
if(f==1){
cout<<-1;
return 0;
}
union long long cnt=0,ma;
while(x<a){
q=x,ma=-1;
cnt++;
while(q){
ma=max(ma,q%10);
q/=10;
}
x=x*ma;
}
if(x<=b){
cout<<cnt;
return 0;
}
if(x>b){
cout<<-1;
return 0;
}
return 0;
}
看题解后发现需要用宽搜,因为我没学宽搜,所以在是没法解决这道题
T4:
题目描述
小可是一名小说审核员,他的工作是看小说,然后把小说中不合法字符串和谐掉。
现在给出若干个不合法的字符串 s[i],和一篇小说 str ,小可需要把 str 中的不合法字符串用 *
和谐掉。当然小可是一个很聪明的审核员,他会用最少的 *
和谐字符串。
比如:
有三个不合法字符串:abc
、ab
、a
。str=abcd
他会只和谐a
,使得str=*bcd
,这样小说中就没了不合法字符串。
请输出和谐之后的小说。
输入描述
第一行:输入一个整数 T 表示测试用例数。
对于每组测试样例:
第一行:输入一个正整数 n ,表示不合法字符串的数量。
接下来n行:每行输入一个字符串,表示不合法字符串。
接下来一行:输入一个字符串,表示小说。
输出描述
输出和谐之后的小说
比赛中这道题我使用暴力的,结果0分,因为没想到一个字符可以去掉多个不合法字符串
看了题解之后,AC了
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
vector<string> ve(n);
for(auto &i: ve)cin>>i;
string s;
cin>>s;
n=s.size();
s=" "+s+" ";
for(int i=1;i<=n;i++){
for(auto &j:ve){
if(i-int(j.size())<0)continue;
if(s.substr(i-j.size()+1,j.size())==j)s[i]='*';}}
cout<<s.substr(1,n)<<endl;}
return 0;}
四.总结
下次我一定要在会的题上都得分