freopen

机房测试:A(数学)+B(二分+曼哈顿距离)+C(性质+二分)

女生的网名这么多〃 提交于 2019-12-03 14:46:06
T1: 分析: 写出s变换的式子:(((s+a)*b+a)*b)…… 将式子化简: 又可以把m写成: 也就是将m拆成一个b进制数, 每次贪心地使 i 大的时候xi尽量大 ,那么就可以花费最小次数凑出m。 #include<bits/stdc++.h> using namespace std; #define ri register int #define ll long long int main() { freopen("a.in","r",stdin); freopen("a.out","w",stdout); ll S,T,a,b; scanf("%lld%lld%lld%lld",&S,&T,&a,&b); ll nowb=1,n=0,ans=(1ll<<62); while(1){ ll t=T-nowb*S; if(t<0) break; if(t%a==0){ ll tot=n,m=t/a; ll bb=nowb; while(m){//把m拆成b进制数 tot+=m/bb; m%=bb; bb/=b; } ans=min(ans,tot); } n++; nowb=nowb*b; } printf("%d\n",ans==(1ll<<62) ? -1 : ans); } /* 10 28 4 2 4685 56756 32764 43856 6 207 5 3

[ARC101E]Ribbons on Tree(容斥,dp)

自古美人都是妖i 提交于 2019-12-03 11:41:17
Description 给定一棵有 \(n\) 个节点的树,满足 \(n\) 为偶数。初始时,每条边都为白色。 现在请你将这些点两两配对成 \(\frac{n}{2}\) 个无序点对。每个点对之间的的路径都会被染成黑色 求有多少种配对方案,使得树上没有白边? \(n\le 5000\) Solution 法一: 树上的路径很难直接考虑。 有一种容斥的做法:记边集为 E ,枚举 T 子集中的边强制为白边,其余的不作限制, 那么: \[ Ans = \sum_{T\subseteq E} (-1) ^ {T} F(T) \] \(F(T)\) 为强制 T 的边为白边的方案数。 把 T 删掉后不难发现树变成了若干个联通块,显然这若干个连通块是独立的。 对于一个大小为 n 的连通块,两点随便配对的方案数是 \((n - 1) * (n - 3) * \cdots * 1\) ,记为 \(g(n)\) 。 然而暴力枚举 T 复杂度过高,考虑树型 dp ,需要知道的状态是 u 当前所在联通块大小以及容斥系数(即 T 的奇偶)。 设 \(dp[u][i][0/1]\) 为 u 子树内,u 所在联通块大小为 i ,T 的奇偶性是 0 / 1 的方案数。 转移就合并 u 的子树 v ,同时考虑 <u, v> 这条边是否选入 T 集合,有点做 01 背包的感觉。 \[ dp[v][i][a]

csp-s模拟99题解

陌路散爱 提交于 2019-12-03 10:34:54
题面: https://www.cnblogs.com/Juve/articles/11791219.html 上来先看T1,发现和之前做过的treap一样,是线段树维护单调栈,然后打了一个小时,然后它挂了 于是看后面的题,然后T2:woc它说的是什么?怎么这么多变量?貌似k=2可以大力分类讨论? 写了半个小时,发现恶心至极,然后puts("-1")就跑了 T3好像有暴力?打了个搜索,一遍过样例,应该有40分了吧,在加上T1暴力就60分了 突然发现T1可以分块直接艹过,果断分块,然后过样例,对拍出锅, 对拍发现了4出错误,然后改完了发现我的分块会被卡成n方? 如果是一个单增的序列,然后他要修改一个特别靠前的位置,我就成n 2 了,但是这种数据倒也跑的挺快, 只是对拍不过 最后半个小时,检查了一下文件名,然后T3本着骗分的原则我按a+b排序从大到小输出 然后改了改T1,发现它过拍了,然后就这样了,一直到考试结束,感觉T1可能会被卡 期望得分:80+10+30=120 实际得分:100+10+100=210!!?? T3不是正解居然A了。。。我rp估计要掉光了,然后T1没有被卡??!! 其实$nlog^2n$和$n\sqrt{n}$复杂度差不多,卡我时间还是挺难的,虽说正解只有一个log,但是常数没有分块优秀 T1: 说是分块其实就是优化的暴力 预处理原序列的前缀答案,前缀最大值

codeforces #597 div2 ABCD !F

你。 提交于 2019-12-03 06:45:17
A. Good ol' Numbers Coloring Description 给出两个整数x,y,问$ax+by,a \geq 0,b \ geq 0$不能表示的正整数是否为无穷多个。 Solution 由裴属定理可以知道当$gcd(x,y)|m$时,等式$ax+by=m$一定存在整数解。 那么显然判断条件就是$gcd(x,y)==1$ B. Restricted RPS Description 已知Bob的剪刀石头布序列。 Alice本人剪刀石头布的次数给定,$a+b+c=n$ Alice至少赢Bob$\lceil \frac{n}{2} \rceil$局才能获胜。 问Alice能否获胜,若可以,给出一组答案序列。 Solution 贪心。 由于总的方案一定 先把能赢的选出来,剩下的随便填入即可。 1 #include <algorithm> 2 #include <cctype> 3 #include <cmath> 4 #include <cstdio> 5 #include <cstdlib> 6 #include <cstring> 7 #include <iostream> 8 #include <map> 9 #include <numeric> 10 #include <queue> 11 #include <set> 12 #include <stack>

2019-11-1

a 夏天 提交于 2019-12-03 05:12:09
T1 这道题,挺明显的,就是有一些细节。 对于要求1:要求 \(\gcd\) % \(a==0\) \(\gcd\) 是所有数共同的 \(\gcd\) 对于要求2:要求 \(a*a<min(c)\) , \(c\) 是每一组的马匹数 然后就可以 \(o(n)\) 做了 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #define LL long long using namespace std; LL read(){ LL x=0,f=1;char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-') f=-1;ch=getchar();} while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } template <typename T>void Write(T cn){ if(cn<0){putchar('-');cn=0-cn;} LL wei=0;T cm=0;LL cx=cn%10;cn/=10; while(cn) cm=cm*10+cn%10,cn/=10,wei++; while(wei--)

调试指南

余生长醉 提交于 2019-12-03 04:43:05
调试指南 由于图床一些问题,本篇博客暂时不添加图片,可以自行运行代码片段查看运行结果。 一、预处理指令的妙用 参考文献: 爽文219 1、使用ifdef 注释 只有在宏定义了ifdef后判断的内容时,使用ifdef和endif括住的内容才会被编译运行。 样例: int main() { #define lky233 #ifdef lky233 freopen("testdata.in", "r", stdin); freopen("testdata.out", "w", stdout); #endif int a, b; cin >> a >> b; cout << a + b << endl; } 除了使用define进行宏定义,还可以在编译命令中添加 -D *** 实现。 例如:-D lky233 另外,ifndef表示若没有定义。 样例: int main() { #define lky233 #ifndef lky233 freopen("testdata.in", "r", stdin); freopen("testdata.out", "w", stdout); #endif int a, b; cin >> a >> b; cout << a + b << endl; } 还有就是,一般常用的OJ都有宏定义ONLINE_JUDGE。 (HOJ也有的) 2、define

CSP-S 模拟测试94题解

倾然丶 夕夏残阳落幕 提交于 2019-12-03 03:48:20
T1 yuuustu: 可以对两边取对数,然后就转化为两个double的比较,时间复杂度$O(n)$ 然后我就用神奇0.4骗分水过 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e6+10; 4 struct BigInt{ 5 int a[100005]; 6 BigInt(){memset(a,0,sizeof(a));a[0]=a[1]=1;} 7 BigInt friend operator * (BigInt x,int y){ 8 int len=x.a[0],las=0; 9 for(register int i=1;i<=len;++i){ 10 x.a[i]=x.a[i]*y+las; 11 las=x.a[i]/10; 12 x.a[i]%=10; 13 if(i==len&&las) ++len; 14 } 15 return x.a[0]=len,x; 16 } 17 void print(){ 18 for(int i=a[0];i>=1;--i) cout<<a[i]; 19 } 20 }; 21 inline bool chk(BigInt a,BigInt b){ 22 for(int i=0;i<=a.a[0];++i) if(a.a[i]!=b.a[i])

20191030

这一生的挚爱 提交于 2019-12-03 02:22:23
前言 第一次交文件…… 先叙述一下我的没脸的行为: T1我的freopen写错了。网站成绩一出后我发现我FE了。 然后非常震惊的我飞快的改了freopen交到网站上去,AC了。 我痛心疾首心想就当是一次教训吧。 结果吃完饭回来公布考试成绩:我AC了!! 好像是收卷收晚了我当时已经改了然后收上去是对的?heiheihei。 T2我还看错题了我修改的是原序列但是我也AC了(kx&skyh也看错了WA70 )!!heiheihei。 总之这是非常没脸的骗到了130分。 T1 其实出题人太善良了,我认为这个题的N和T应该开到1e7的。 我的方法是用$\Theta(NlogN)$的时间复杂度内预处理出所有答案然后$\Theta(T)$回答所有询问。 设a[i]为满足$x^i>i!$的最小x,显然a[i]随i的增大单调不降。 利用double存下倍数并用快速幂实现快速转移就行了。 时间复杂度$\Theta(NlogN)$,空间复杂度$\Theta(N)$。 #include<cstdio> int const lt=1e5; double const o=1.0,eps=1e-9; int n; int a[lt|1]; double la; inline double power(double x,int y){ double as=1; for(;y;y>>=1,x=x*x) if(y&1

day2018.6.23模拟赛总结

匿名 (未验证) 提交于 2019-12-03 00:34:01
emmm...今天的题考的不是很好,T2莫名挂机. T1: 题目大意:以最简分数的形式给出一个时钟上时针与分针的夹角,时针与秒针的夹角,分针与秒针的夹角,求出所有满足条件的时间. emmm...大水题,直接暴力枚举用double存分数水过. 考场AC代码: #include < bits / stdc ++. h > using namespace std ; #define ACF inline void typedef long long LL ; typedef double LD ; const LD eps = 0.0000001 ; int a1 , b1 , a2 , b2 , a3 , b3 , T , s , h , m , sum ; LD x , y , z ; struct node { int x , y , z ; } q [ 1000000 ]; ACF into (){ scanf ( "%d/%d%d/%d%d/%d" ,& a1 ,& b1 ,& a2 ,& b2 ,& a3 ,& b3 ); x = 1.0 * a1 / b1 ; y = 1.0 * a2 / b2 ; z = 1.0 * a3 / b3 ; } bool is ( double a , double b ){ if ( fabs ( a - b )<= eps )

codeforces - 1245 (div2)

匿名 (未验证) 提交于 2019-12-03 00:17:01
A - Good ol' Numbers Coloring 直接判断两个数是否互质 #include <stdio.h> #include <iostream> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <stack> #pragma GCC optimize(2) #define mm(i,v) memset(i,v,sizeof i); #define mp(a, b) make_pair(a, b) #define one first #define two second using namespace std; typedef long long ll; typedef pair<int, int > PII; const int N = 1e6 + 5, mod = 1e9 + 9, INF = 0x3f3f3f3f; int t, a, b; int gcd(int a,int b){ return b==0?a:gcd(b,a%b); } int main() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); cin.tie(0); cout.tie(0