A
C++ Example
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cctype>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
if(a+b==15)puts("+");
else if(a*b==15)puts("*");
else puts("x");
return 0;
}
B
C++ Example
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cctype>
using namespace std;
const int maxn=100000;
char str[maxn];
int main(){
int w;
scanf("%s",str);
scanf("%d",&w);
if(w==1){printf("%s",str);return 0;}
for(int i=0;i<strlen(str);i++){
if(i%w==0){
putchar(str[i]);
}
}
return 0;
}
C
这题画风突变啊喂
这题我比较SB打表没找出规律还是yjw学长点醒了我 (yjw)学长 (orz)
这题其实是个概率题,长度为(m),则最多有(m-1)对数字,显然每一对之间是互相不影响的,于是我们先来研究一对数字的情况:
首先每个数字都有n个数字与之配对,总计(n × n)种情况,再考虑对答案做贡献的,假设那一对数字是(x,y (y>x)),则能做贡献的情况有(n-d)种.当然我们这只是(x<y)的情况,所以共(2×(n-d))种。当然(d==0)时,就无关大小,只有((n-d))种,这需要特判.
然后交上去还是(WA)了,发现强制类型转换写在括号外导致会爆(int),比较坑
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <cmath>
#define ri register int
using namespace std;
template <class T>void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;
return ;
}
int n,m,d;
int main(){
read(n),read(m),read(d);
if(d==0)printf("%.10Lf
",(long double)(m-1)/n);
else if(n<=d)printf("0.0000000
");
else printf("%.10Lf
",(long double)(1.00*2*(n-d)*(m-1))/n/n);
return 0;
}
D
这题解法很有意思,比较考验智商
求两个最短路,一个是(s)到(x (x in [1,n]))的用(yen)衡量的最短路(dis_1(s,x)),一个是从(t)到(x (x in [1,n]))的最短路(dis_2(t,x)),用(snuuk)衡量的最短路
然后我们想,最后(n-1)年出发的时候只用(n)这个点可以交换货币,所以(val[n-1]=dis_1(s,n)+dis_2(t,n))
再向下想,在(n-2)年出发时,要么继续到(n)这个点交换货币,要么到(n-1)这个点交换货币,以此类推得到
(val[p]=min(val[p+1],dis_1(s,p)+dis_2(t,p)) p in [0,n-1])
最后初始钱数(-val)值就是对应答案
E
我太菜不知道怎么做,等待咕咕咕的题解吧