freopen

2019 China Collegiate Programming Contest Qinhuangdao Onsite

匿名 (未验证) 提交于 2019-12-03 00:14:01
传送门 D - Decimal 题意: 询问 \(\frac{1}{n}\) 是否为有限小数。 思路: 拆质因子,看是不是只包含2和5即可,否则除不尽。 Code #include <bits/stdc++.h> #define MP make_pair #define fi first #define se second #define sz(x) (int)(x).size() using namespace std; typedef long long ll; typedef pair<int, int> pii; const int N = 1e5 + 5; int t,n; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); #ifdef Local freopen("../input.in", "r", stdin); freopen("../output.out", "w", stdout); #endif cin>>t; while(t--){ cin>>n; while(n%2==0){ n/=2; } while(n%5==0){ n/=5; } if(n!=1)cout<<"Yes\n"; else cout<<"No\n"; } return 0; } E - Escape

AtCoder Regular Contest 101

匿名 (未验证) 提交于 2019-12-03 00:11:01
传送门 C - Candles 双指针维护一个区间搞一下就行。 Code #include < bits / stdc ++. h > #define INF 0x3f3f3f3f using namespace std ; typedef long long ll ; const int N = 1e5 + 5 ; int n , k ; int a [ N ]; int main () { ios :: sync_with_stdio ( false ); cin . tie ( 0 ); cin >> n >> k ; for ( int i = 1 ; i <= n ; i ++) cin >> a [ i ]; int p = lower_bound ( a + 1 , a + n + 1 , 0 ) - a - 1 ; int left = max ( 1 , p - k + 1 ); int ans = INF ; while ( left <= p + 1 ) { int right = left + k - 1 ; if ( right > n ) break ; if ( a [ right ] < 0 ) { ans = min ( ans , - a [ left ]); } else if ( a [ left ] > 0 ) { ans = min (

C/C++ IO重定向

匿名 (未验证) 提交于 2019-12-03 00:03:02
转载,原始出处未知。 这个对OJ上做题很有用。OJ基本都是用标准输入输出(USACO除外)。但如果你在调试的时候也都是从控制台输入,那就太浪费宝贵的时间了。我们可以重定向标准输入,调试的时候从文件读,提交时从标准输入读。 C语言 方法比较简单。使用函数freopen(): freopen("data.in","r",stdin); freopen("data.out","w",stdout); 这样就把标准输入重定向到了data.in文件,标准输出重定向到了data.out文件。 这两句代码之后,scanf函数就会从data.in文件里读,而printf函数就会输出到data.out文件里了。 C++ streambuf* rdbuf () const; streambuf* rdbuf (streambuf *) 相当于get/set方法。 streambuf *backup; ifstream fin; fin.open("data.in"); backup = cin.rdbuf(); // back up cin's streambuf cin.rdbuf(fin.rdbuf()); // assign file's streambuf to cin // ... cin will read from file cin.rdbuf(backup); // restore

递推与递归专题练习

匿名 (未验证) 提交于 2019-12-02 23:05:13
搜索与回溯,指数级算法。 #include<bits/stdc++.h> #define rg register #define il inline #define co const template<class T>il T read(){ rg T data=0,w=1; rg char ch=getchar(); while(!isdigit(ch)){ if(ch=='-') w=-1; ch=getchar(); } while(isdigit(ch)) data=data*10+ch-'0',ch=getchar(); return data*w; } template<class T>il T read(rg T&x){ return x=read<T>(); } typedef long long ll; using namespace std; vector<int>chosen; int n; void dfs(int x){ if(x==n+1){ for(unsigned i=0;i<chosen.size();++i) printf("%d ",chosen[i]); puts(""); return; } dfs(x+1); chosen.push_back(x); dfs(x+1); chosen.pop_back(); } int main(){ /

2019-10-29

别说谁变了你拦得住时间么 提交于 2019-12-02 19:39:09
T1 T1可能(一定)在某些大佬的眼中就是一道送分题( 然而我只有10分 ) 明眼人都看得出来这是一道拓展欧几里得的题目,我们知道系数 \(a,b\) ,要求解方程 \(ax+by=c\) 并且使得 \(|x|+|y|\) 取得最小值 我们知道拓展欧几里得可以求解 \(ax+by=gcd(a,b)\) ,并且如果有某一正数c满足 \(c\) % \(gcd(a,b)==0\) ,令 \(k=c/gcd(a,b)\) 那么显然 \(akx+bky=c\) 令 \(x=kx,y=ky\) 我们现在相当于求解 \(|x|+|y|\) 对于一个方程 显然 \(ax+by=gcd(a,b)\) 与 \(a(x-nb)+b(y+na)=x\) 是等价的 因此我们可以将我们用拓展欧几里得求出来的特殊解通过这种变形,求得满足条件的解。而如果要满足条件的话,我们需要让 \(x-nb\) 接近于0 或者令 \(y+na\) 接近于0 假设 \(a<b\) 显然如果x变化了 那么对于 y的变化是很小的 因此如果让a的未知数x接近于0,对于y的影响是比较小的,那么可以优化一下,将问题简化一下(即在开始的时候 \(if(a<b) swap(a,b)\) ) 然后就可以做了(其实不要上面的优化也可以) #include <cstdio> #include <iostream> #include

HGOI 20191029 题解

谁说胖子不能爱 提交于 2019-12-02 18:31:01
Promblem A 小$G$的字符串 给定$n,k$,构造一个长度为$n$,只能使用$k$种小写字母的字符串。 要求相邻字符不能相同且$k$种字母都要出现 输出字典序最小的字符串,无解输出$-1$。 对于$100\%$的数据满足$\leq n \leq 10^5$   Solution :     我们考虑构造,显然是形如$a,b,a,b,...,c,d...$的字符串。     即从$[1,n-k+2]$交替填$a,b$,然后$[n-k+3,n]$依次填$c,d,e ... $     这样构造的时间复杂度是$O(n)$ # pragma GCC optimize(3) # include <bits/stdc++.h> using namespace std; const int N=1e5+10; char ans[N]; int n,k; int main() { freopen("str.in","r",stdin); freopen("str.out","w",stdout); scanf("%d%d",&n,&k); if (k == 1 && n == 1) { puts("a"); return 0; } if (k > n || k ==1) { puts("-1"); return 0; } char now='c'; for (int i=n-k+3;i<

机房模拟测试4:计数类dp+水题+树上计数

馋奶兔 提交于 2019-12-02 16:43:43
T1: 原题: P2467 [SDOI2010]地精部落 分析: 定义f[i][0/1]为递推到第i位,是奇数项大于两边还是偶数项大于两边。 但是发现,上面两种情况是等价的,只需要求出一种即可,然后将答案*2。 假设已经放了i-1个合法的高度,现在将第i个高度放入。 在i-1个高度中有i个位置是可以插入的,枚举这i个位置。 假设现在放在第j个位置,那么它将序列划分成了两部分,左边有j-1个,右边有i-j个,合法方案就是f[j-1]*f[i-j]。 但这还不够,我们发现左右分别放哪些数还不知道,所以还要乘C(i-1,j-1)(在i-1个数中选j-1个放左边) 注意:模数非质数,不能用费马小定理预处理阶层,要用杨辉三角形递推!! #include<bits/stdc++.h> using namespace std; #define N 4205 #define ll long long #define ri register int ll f[N][3],mod; int c[N][N]; int n; void init() { for(ri i=0;i<=n;++i) c[i][i]=1,c[i][0]=1; for(ri i=1;i<=n;++i) for(ri j=1;j<=n;++j){ c[i][j]=(c[i-1][j-1]+c[i-1][j]) %mod; } }

输入输出速度统计

耗尽温柔 提交于 2019-12-02 16:17:55
在学校电脑上跑的文件输入输出。 输出: 测试壹: 输出1e6内数字, 空格 隔开,printf VS cout 1. freopen("1.txt","w",stdout); for(int i=1;i<=1000000;i++){//1e6 printf("%d ",i); } 测试①:2.82 测试②:2.777 测试③:2.847 测试④:2.887 测试⑤:2.797 平均值:2.8256 2. freopen("1.txt","w",stdout); for(int i=1;i<=1000000;i++){ cout<<i<<' '; } 测试①:0.1969 测试②:0.3226 测试③:0.2028 测试④:0.2309 测试⑤:0.1986 平均值:0.23036 小总结:出乎意料……我没关stdout的同步啊,咋快这么多…… 测试贰:printf VS cout ,输出1e6内数字, 回车 隔开 1. freopen("1.txt","w",stdout); for(int i=1;i<=1000000;i++){ printf("%d\n",i); } 测试①:3.073 测试②:2.886 测试③:2.818 测试④:3.145 测试⑤:2.905 平均值:2.9654 小对比:空格和回车对于printf来说变化不大,毕竟只是格式化输出,原理一样。 2

AtCoder Beginner Contest 144 CDE题解

徘徊边缘 提交于 2019-12-02 13:34:13
Atcoder评测机没有ONLINE_JUDGE这个宏!! A,B巨水题 C - Walk on Multiplication Table Description 给一个数mul,求满足$x*y=mul \ && min\{x+y-2\}$ $mul \leq 10^{12}$ Solution 由均值不等式可知$x+y \geq 2*\sqrt{xy}$,给定xy,那么$min\{x+y-2\}$一定出现在$\sqrt{xy}$附近,扫一遍即可 1 #include <algorithm> 2 #include <bits/stdc++.h> 3 #include <cctype> 4 #include <cmath> 5 #include <cstdio> 6 #include <cstdlib> 7 #include <cstring> 8 #include <ctime> 9 #include <iostream> 10 #include <map> 11 #include <numeric> 12 #include <queue> 13 #include <set> 14 #include <stack> 15 #if __cplusplus >= 201103L 16 #include <unordered_map> 17 #include <unordered_set

1024程序员日考试总结

依然范特西╮ 提交于 2019-12-02 06:56:17
同步: https://buringstraw.win/archives/67/ 1024程序员日考试总结 大过节的,考什么试啊 今天的题在洛谷上都能找到,所以就不放题面了。。 数学题(math 1S 128M) P3123 贝茜说哞Bessie Goes Moo 提交的时候电子教室卡死,拿u盘拷上去 math.cpp 又变成了乱码。。。 虽然只写了30分 首先,这道题直接枚举的复杂度是 \(500^7\) ,是过不了的。 而因为余数可加、可乘的性质,所以只要统计除以7的余数的情况就行了,复杂度 \(7^7\) ,跑得飞快 (洛谷 提高+/省选- 的难度是认真的吗) 套了7个for的代码我都不好意思放上来。。。 #include <cstdio> long long qz[27][8]; int n; int main(void) { // freopen("math.in", "r", stdin); // freopen("math.out", "w", stdout); scanf("%d", &n); for (int i = 1; i <= n; ++i) { char T[2]; scanf("%s", T); int t; scanf("%d", &t); ++qz[T[0] - 'A'][(t + 700000) % 7]; } long long res = 0;