哎,很遗憾最终没有被选上去郑州打比赛…
虽然未能代表学校参赛,但是自己刷题还是得继续,下一次选拔赛时一定要看到不一样的自己
第一场只做出来四题,感觉做的不怎么顺手,有点紧张加上以前做过的题没做出来就心态有点崩了,然后昨天脑袋有点疼(不给自己找理由)
A:DNA Sorting
这一场没用百度翻译,导致看到英文题直接跳了,到过了一个小时左右才来看题,发现其实就是一道水题,
题意:对于字符串中的某一个字符求他后面比它小的字符个数,然后再求下和即可
#include
#include
#include
#include
struct node{
char str[110];
int cnt;
};
node a[110];
bool cmp(node x,node y){
return x.cnt<y.cnt;
}
using namespace std;
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%s",a[i].str);
int ans=0;
for(int j=0;j<n;j++){
for(int k=j+1;k<n;k++){
if(a[i].str[j]>a[i].str[k])
ans++;
}
}
a[i].cnt=ans;
}
sort(a,a+m,cmp);
for(int i=0;i<m;i++){
printf("%s\n",a[i].str);
}
return 0;
}
这是刚刚写的,看了下比赛写的代码,虽然过了,但是感觉有点繁琐,直接用个结构体多简单,还是在比赛中容易紧张
B:杀人游戏
对于这道题,我不想说话,暑假刚做过的一道题,结果还是没做出来,自己还特地写过一篇博客。。。
https://blog.csdn.net/boliu147258/article/details/98793164
C:我是菜鸟,我怕谁
也是一道水题,本意就是等差数列求和。。。
#include
#include
#include
#include
#define ll long long
using namespace std;
int main(){
int t;
int n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
int sum=0;
int an=1;
for(int i=1;i<=n;i++){
sum=(sum+an)%10000;
an=(an+2)%10000;
}
printf("%d\n",sum);
}
return 0;
}
D:Asteroids
开始由于没翻译,导致题目都没咋看懂,直接就放弃了,待补…
E:Ugly Problem
待补
F:The Cow Lineup
待补
G:母牛的故事
一道水的不能再水的题
#include
#include
#include
#include
#include
#define ll long long
using namespace std;
ll fx(int n){
if(n==1)
return 1;
else if(n==2)
return 2;
else if(n==3)
return 3;
else
return fx(n-1)+fx(n-3);
}
int main(){
int n;
while(~scanf("%d",&n)){
if(n==0)
break;
printf("%lld\n",fx(n));
}
return 0;
}
H:Bombing
待补
I:Minimal Power of Prime
待补
J:病毒入侵
其实标程应该是AC自动机,但是我看题目给定每个网站病毒数不大于三,于是就想用KMP算法,但是TLE。。。。
头铁的我 又试了试strstr函数,结果居然过了,皆大欢喜,hhhh
好像G++交不行,要C++交
#include
#include
#include
#include
using namespace std;
char str[510][210];
char ss[100010];
int a[10];
int main(){
int n,m;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",str[i]);
}
scanf("%d",&m);
int ans=0;
for(int i=1;i<=m;i++){
int cnt=0;
int flag=0;
scanf("%s",ss);
for(int j=1;j<=n;j++){
char *s;
s=strstr(ss,str[j]);
if(s==NULL){
continue;
}
else{
a[cnt]=j;
flag=1;
cnt++;
}
if(cnt>3)
break;
}
if(flag==1){
ans++;
printf("web %d:",i);
for(int j=0;j<cnt;j++){
printf(" %d",a[j]);
}
printf("\n");
}
}
printf("total: %d\n",ans);
return 0;
}
补题的时候再用AC自动机做下
一场想让我放弃ACM的冲动。。。。。
一道水题,wa我六次,直接原地爆炸,后面题目都看不进去了。。。。。。
A:Virtual Friends
感觉就是一个并查集,但是没做出来,待补
B:吃糖果
待补
C:Period
待补
D:整除的尾数
一道简单题,直接循环判断下即可
#include
#include
#include
#include
using namespace std;
int main(){
int a,b;
while(~scanf("%d%d",&a,&b)){
if(a==0&&b==0)
break;
int num=a*100;
int flag=0;
for(int i=0;i<=99;i++){
if((num+i)%b==0)
{
if(flag==0){
if(i<10){
printf("0%d",i);
}
else
printf("%d",i);
flag=1;
}
else{
if(i<10)
printf("0%d",i);
else
printf(" %d",i);
}
}
}
printf("\n");
}
return 0;
}
E:跑跑卡丁车
待补
F:RP问题
待补
G:Doing Homework again
明明知道是个DP题,但是就是没做出来。。。。
待补
H:素数回文
素数筛加上回文筛,但是没做出来…
待补
I:三角形
一道崩溃的题,不知道是眼瞎了,还是咋地,明明写的正数,偏偏看成了正整数…
#include
using namespace std;
int main(){
double a,b,c;
int t;
scanf("%d",&t);
while(t--){
scanf("%lf%lf%lf",&a,&b,&c);
double t;
if(a>b){
t=a;
a=b;
b=t;
}
if(a>c){
t=a;
a=c;
c=t;
}
if(b>c){
t=b;
b=c;
c=t;
}
if((a+b)>c&&(c-b)<a)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
J:Building Block
待补
估计是学长学姐出的原创题,就前一个小时干了事,后面两个半小时,一道题都没A出来…
A:觉醒
题目描述一大截,开始直接没看,后面等A了两题后,再来看的这题,其实就是求中间中某点到原点的距离
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using namespace std;
int main(){
double a,b,c;
int t;
int n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
double d=0;
for(int i=0;i<n;i++){
scanf("%lf%lf%lf",&a,&b,&c);
d=max(d,sqrt(a*a+b*b+c*c));
}
printf("%.2f\n",d);
}
return 0;
}
B:DJ的企鹅
赛后听大佬说,开始题目都没看懂的我麻了
待补
C:magia
题目讲的很明白了,就是判断一个数是不是回文串,我用字符串存的数,感觉这样好判断点
#include
#include
#include
#include
#include
#include
#define ll long long
using namespace std;
int main(){
char str[100010];
scanf("%s",str);
int len=strlen(str);
int flag=0;
for(int i=0;i<len/2;i++){
if(str[i]==str[len-i-1])
continue;
else{
flag=1;
break;
}
}
if(flag==0){
printf("%s\n",str);
}
else
printf("-1\n");
return 0;
}
D:multiplication
也很水,就是判断大小,注意下long long即可
#include
#include
#include
#include
#include
#include
#define ll long long
using namespace std;
int main(){
ll a,b,c,d,e,f;
scanf("%lld%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e,&f);
if(a*b*c>d*e*f){
printf("1\n");
}
else if(a*b*c==d*e*f){
printf("0\n");
}
else
printf("-1\n");
return 0;
}
E:来个板烧鸡腿堡吧!
不配吃板烧鸡腿堡的我,这题没做出来,一直wa,结果赛后看别人代码,核心代码五行不到,直接从后面遍历即可,我还想什么后缀和,屁。。。
待补
F: 漫无止境的八月
我直接用的map维护,感觉方便好多
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using namespace std;
map<ll,ll>mp;
int main(){
ll n;
ll num;
scanf("%lld",&n);
for(ll i=0;i<n;i++){
scanf("%lld",&num);
mp[num]++;
}
map<ll,ll>::iterator it;
for(it=mp.begin();it!=mp.end();it++){
printf("%lld %lld\n",it->first,it->second);
}
return 0;
}
G:梅干菜红烧肉加量扁粉加煎蛋加辣汤
直接对x,m,c相加求平均值,然后与c,m中的最小值 进行比较
如果最小值小于平均值,那么输出最小值
否则输出平均值
#include
#include
#include
#include
#define ll long long
using namespace std;
int main(){
ll n;
ll a,b,c;
scanf("%lld",&n);
for(int i=0;i<n;i++){
scanf("%lld%lld%lld",&a,&b,&c);
ll minnum=min(a,b);
ll num=(a+b+c)/3;
if(minnum<num){
printf("%lld\n",minnum);
}
else
printf("%lld\n",num);
}
return 0;
}
H:终局
感觉和hdu一道状压DP的题好像,但是我还是不会做。。。
待补
I:stick
待补
J:ski
待补
又快十二点了,这周就是把这三场的题目补完
虽然这次的确有点失望,而且感觉某些人成绩不真实 ,但是不管怎样,既然热爱就坚持到底,没刷个几百道题,能说自己努力过,参加过ACM??
大二这一年太重要了,不必在意别人的眼光,继续朝着目标奋斗!!!