A:我是签到题
说是签到题,其实有点思路,这道题爆了​​​long long​​​,所以需要用​​char s[]​​​ ,​​len=strlen(s)​​​和需要删除​​n​​个数

92081346718538 10
以这个样例为例:
9 2 0 8 1 3 4 6 7 1 8 5 3 8
from[0,10]查找max=9 id=0 id++=1 n++=11
from[1,11]查找max=8 id=3 id++=4 n++=12
from[4,12]查找max=8 id=10 id++=11 n++=13
from[11,13]查找max=8 id=13 id++=14 n++=14
answer:9888

AC代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
char s[maxn];
int main()
{
int n;
while(~scanf("%s %d",s,&n))
{
int m=strlen(s);
int id=0;
while(n<m)
{
for(int i=id; i<=n; i++)//总共找m-n次
{
if(s[id]<s[i])
{
id=i;//使前区间不影响以后的区间
}
}
printf("%c",s[id]);
id++;//每次更新区间
n++;
}
printf("\n");
memset(s,0,sizeof(s));
}
}

B:圈钱杯
可能是我理解能力不太好,感觉题挺难读的​​​v_v​​​ 题意:判断给定的​​n​​个比赛中的题量,从中选择比赛,让比赛题的数量尽可能的大于天的序号即可,求得训练最大天数
AC代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 20005
int a[maxn],n;
void slove()
{
sort(a+1,a+n+1);
int ans=0;
int id=1;
for(int i=1; i<=n; i++)
{
if(id<=a[i])
{
id++;
ans++;
}
}
printf("%d\n",ans);
}
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
slove();

}

C:我才是真正的签到题
题解:这题可能对于现在的新生来说很难,但是其实就是一个板题吧,不多说直接看代码
AC代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
string add(string s1,string s2)
{

int j,l,la,lb;
string ma,mi;
ma=s1;
mi=s2;
if(s1.length()<s2.length())
{
ma=s2;
mi=s1;
}
la=ma.size();
lb=mi.size();
l=la-1;
for(j=lb-1; j>=0; j--,l--)
ma[l] += mi[j]-'0';
for(j=la-1; j>=1; j--)
if(ma[j]>'9')
{
ma[j]-=10;
ma[j-1]++;
}
if(ma[0]>'9') //处理第一位超过9了。
{
ma[0]-=10;
ma='1'+ma;
}
return ma;
}
int main()
{

string s[maxn];
s[1]="1";
s[2]="3";
for(int i=3;i<=255;i++)
{
s[i]=add(s[i-1],s[i-2]);
}
int n;
while(~scanf("%d",&n))
{
printf("%s\n",s[n].c_str());
}

}

D:签到不签到他们说了不算
题意有点扯,看不懂在说啥,还好有提示
做法:找一下​​​*​​​的最大,最小坐标围城的空间,然后更改该空间中的​​.​​​和​​*​​ AC代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
#define inf 0x3f3f3f3f
char s[maxn][maxn];
int n;
void draw_p()
{
for(int i=0; i<n; i++)
{
scanf("%s",s[i]);//输入图形
}
int len=strlen(s[1]);
int min_idx=inf,min_idy=inf,max_idx=~inf,max_idy=~inf;//寻找边界
for(int i=0; i<n; i++)
{
for(int j=0; j<len; j++)
{
if(s[i][j]=='*')
{
min_idx=min(min_idx,i);
min_idy=min(min_idy,j);
max_idx=max(max_idx,i);
max_idy=max(max_idy,j);
}
}
}
for(int i=min_idx; i<=max_idx; i++)//更改边界内空间图形
{
for(int j=min_idy; j<=max_idy; j++)
{
if(s[i][j]=='.')
{
s[i][j]='*';
}
else
{
s[i][j]='.';
}
}
}
for(int i=0; i<n; i++)//输出图形
printf("%s\n",s[i]);
printf("\n");
}
int main()
{
while(~scanf("%d",&n))
{
draw_p();
}
}

E:wr学姐的小调查
题解:这题真的很水,不会写的,要自己反思一下了
我懒得写了,直接copy一个代码,改一下好了:
AC代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
#define sizex 35
struct node
{
char s[sizex];
int y;
int m;
int d;
} temp[maxn];
bool cmp( node a,node b)
{
if(a.y==b.y)
{
if(a.m==b.m)
{
return a.d>b.d;
}
else
return a.m>b.m;
}
else
return a.y>b.y;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%s",temp[i].s);
scanf("%d %d %d",&temp[i].y,&temp[i].m,&temp[i].d);
}
sort(temp,temp+n,cmp);
for(int i=n-1; i>=0; i--)
{
printf("%s\n",temp[i].s);
}
}

F:小仙女的烦恼
学姐出这么水一道题,没有过的,应该反思一下,之后该更加努力了
AC代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
char s[maxn];
int main()
{
int n;
while(~scanf("%d",&n))
{
int t=n;
bool id=false;//默认没女生超过120
while(t--)
{
int weigh;
scanf("%d %s",&weigh,s);
if(s[0]=='w'&&weigh>120)
{
id=true;//事实有女生超过120
}
}
if(id)
{
printf("hhh\n");
}
else
{
printf("yyy\n");
}
}
}

G:pxj爱喝可乐
给新生的签到题,把心里所想模拟出来即可
AC代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
int main()
{
int n;
//喝可乐,贪心写一下即可
while(~scanf("%d",&n)&&n)
{
int id=0;
int sum=n;
while(n--)
{
id++;
if(id%4==0)
{
n++;
sum++;
id=0;
}
}
printf("%d\n",sum);
}
}

H:鬼王的质问
一道很难的题,并且话很绕,用结构体可以写,不过需要活用​​​link[]​​​,用​​link[]​​​记录小弟,再利用前缀和将小弟能力叠加到大哥身上,再结构体快排,再判断就行了
记录写法:

memset(link,-1,sizeof(link));
for(int i=link[_id]; i!=-1; i=link[i])
{

}
sum[i]+=sum[link[i]]//链式的前缀

题不难,但需要好好理解,题意,代码就copy别人的吧,思路就这么个思路
AC代码:

#include <iostream>
#include <vector>
#include <memory.h>
#include <map>
#include <algorithm>
#include <time.h>
#include <cstdio>
#include<map>
using namespace std;
#define maxx 100
#define minn 1

struct xxx
{
int a;
int xb;
int fu;
} an[100];
struct yyy
{
int fu;
} bn[100];
bool cmp(xxx a,xxx b)
{
return a.a>b.a;
}
int main()
{

int N,M,Q;
while(~scanf("%d %d %d",&N,&M,&Q))
{
memset(bn,0,sizeof(bn));
memset(an,0,sizeof(an));
for(int i=1; i<=N; i++)
{
scanf("%d %d",&an[i].xb,&an[i].a);
}

for(int i=1; i<=M; i++)
{
int a,b;
scanf("%d %d",&a,&b);
an[b].fu=a;
bn[b].fu=a;
while(an[a].fu!=0)//把每个的值加上
{
an[a].a+=an[b].a;
a=an[a].fu;
}
an[a].a+=an[b].a;
}

sort(an+1,an+N+1,cmp);

for(int i=0; i<Q; i++)
{
int a,b;
scanf("%d",&a);
for(int i=1; i<=N; i++)
{
if(an[i].xb==a)
{
b=i;
break;
}
}
if(b<=12)
{
if(bn[a].fu)
printf("aaaaa\n");
else
{
if(b>=8)
printf("aaaaa\n");
else if(b==7)
printf("hhhhh\n");
else
printf("~~~~~\n");
}
}
else
{
while(bn[a].fu)
{
a=bn[a].fu;
for(int i=1; i<=N; i++)
{
if(an[i].xb==a)
{
b=i;
break;
}
}
if(b<=12)
break;
}
for(int i=1; i<=N; i++)
{
if(an[i].xb==a)
{
b=i;
break;
}
}
if(b<=12)
{
if(bn[a].fu)
printf("aaaaa\n");
else
{
if(b>=8)
printf("aaaaa\n");
else if(b==7)
printf("hhhhh\n");
else
printf("~~~~~\n");
}
}
else
printf("~~~~~\n");
}

}

}

}

I:WAAAAA
这题是一个简单的模拟题,利用结构体进行一波操作即可。
题解:记录每个人AC的题量,记录每个人的罚时,当题量相等时,按罚时低的排序,否则按题量多的排序
AC代码:

#include<bits/stdc++.h>
using namespace std;
//cxk&&qbl
#define maxn 100005
#define pub_t 20
#define num 15
char s[maxn];
struct node
{
int id;//序号
int ans_n;//题量
int run_t;//总时间
int sum[num];//罚时
int judge[num];//判断该题是否通过
} temp[maxn];
bool cmp(node x,node y)
{
if(x.ans_n==y.ans_n)//如果题量一样按照罚时排序
{
return x.run_t<y.run_t;
}
return x.ans_n>y.ans_n;//否则按题量排序
}
int main()
{
int n,m,k;
int t;
scanf("%d",&t);
while(t--)
{
memset(temp,0,sizeof(temp));
scanf("%d %d %d",&n,&m,&k);
int a,b,c;
for(int i=1; i<=k; i++)
{
scanf("%d %d %d %s",&a,&b,&c,s);
temp[b].id=b;//每个人的id
if(s[0]=='A'&&(!temp[b].judge[c]))
{
temp[b].judge[c]=1;//该题通过
temp[b].run_t+=(temp[b].sum[c]+a);
temp[b].ans_n++;
}
else
{
temp[b].sum[c]+=pub_t;
}
}
sort(temp+1,temp+1+n,cmp);
if(temp[1].id==1)
printf("WAAAAA\n");
else
printf("%d\n",temp[1].id);

}
}

J:智斗南工白嫖王
一道简单题,把十六进制中的​​​1--15​​​转化成二进制拼接起来就行了,理解进制转化的运算即可
AC代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
char s[1005];
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%s", s);
int n = strlen(s);
for(int i = 0; i < n; i++)
{
switch(s[i])
{
case '0':
printf("0000");
break;
case '1':
printf("0001");
break;
case '2':
printf("0010");
break;
case '3':
printf("0011");
break;
case '4':
printf("0100");
break;
case '5':
printf("0101");
break;
case '6':
printf("0110");
break;
case '7':
printf("0111");
break;
case '8':
printf("1000");
break;
case '9':
printf("1001");
break;
case 'A':
printf("1010");
break;
case 'B':
printf("1011");
break;
case 'C':
printf("1100");
break;
case 'D':
printf("1101");
break;
case 'E':
printf("1110");
break;
case 'F':
printf("1111");
break;
}
}
printf("\n");
}
return 0;
}