总结:本周的题型还是属于比较经典和简单的,还是要多多补题,多多写题,争取有更大的进步。
坚持写题!
Dashboard - The 15th Jilin Provincial Collegiate Programming Contest - Codeforces
A题:很简单
B题:本题也很简单,但是漏判了一种情况导致贡献了一个WA......
这道题我学了一下小数的高精度除法,还是比较容易理解的
for(int i=0;i<k-1;i++)
{
a=a%b*10;//核心代码,想要保留n位小数
cout<<a/b;
}
a=a%b*10;
temp=a/b;
a=a%b*10;
if(a/b>=5)//特判最后一步四舍五入
{
cout<<temp+1;
}
else
{
cout<<temp;
}
C题:确实不是枚举,而是寻找递推关系式
方法:如果一下子推不出来,就暴力把多个括号展开,然后找规律
ac代码: 还有一个BSGS需要学
inline void solve(){
read(a,b,m,x0,x);
if(x0==x){
puts("YES");return;
}
if(a==0){
puts(b==x?"YES":"NO");
return;
}
if(a==1){
if(b!=0)puts("YES");
else{
puts("NO");
}
return;
}
int u=getinv(a-1,m);
b=1ll*b*u%m;
x=(x+b)%m;x0=(x0+b)%m;
if(x0==0){
puts(x==0?"YES":"NO");return;
}
x=LL(x)*getinv(x0,m)%m;
int t=BSGS(a,x,m);
puts(t>=0?"YES":"NO");
}
D题:
是一个什么复杂的算法,不会......
E题:
给定一个数组,问数组中存不存在两个数它们的异或是1
不是n2枚举不然肯定会TLE,而是在一个set中保存,这样复杂度就会变成nlogn
再次学习了set的用法
本题注意事项有以下几点
- 最好不用memset初始化为0,其实在本题中根本不用初始化为0
- 最好用scanf和printf,如果用cin和cout要关流同步
- 数组如果范围够的话最好开int 而不是long long
- 数组大小最好是略大于给定范围的奇数
G题:
本题其实就是用高斯消元法解方程,看看能不能解出来(用增广矩阵之类的),因为可以对每一位用二进制表示,可以压缩为几个64位的long long 数
H题:
直接对没一条路径用map<pair<int,int>>存储,终于学会了这种结构的用法......因为这个人走每一条路的可能性都相同,所以直接求出他走路的数学期望即可
注意是在模p的环境下进行,所以最后求期望的时候要用扩展欧几里得算法求逆元
K题
不懂,是一个难难的数学知识
L题
给定一个字符串,对于每一个字符串可以删除最后一位或者在最后一位后增加一位,任选两个后缀,求使得这两个后缀相等的最大操作数
看懂了队友的代码,但是不知道怎么证明......有些玄学
M题:
简单
总结:还是要多多做题!再努力一点吧