freopen

机房测试模拟2:模拟+数学+数位dp

旧巷老猫 提交于 2019-12-02 06:50:55
T1: 分析: 画图模拟,发现折叠后的长度会变成折叠位置左右两部分取max,难点在于:折叠后找不到对应的点在哪个位置。 因为n很大,但其实很多位置都是用不到的,所以处理m个操作。 一次操作后,可能会影响到后面的所有操作的位置,于是将操作离线,一次操作后将后面所有将要用到的操作位置都更新。 怎么更新? 例如:1 2 3 4 5 6 7 8 现在折3,下一步折8,8应该变成abs(3-8)=5 因为相当于将节点重新标号了: 1 2 3 4 5 6 7 8 / / 0 1 2 3 4 5(被翻过的位置不会再有了) 然后长度又被更新成:len=max(len-a[i],a[i]) (相比起来这种神奇又巧妙的方法 ssw的模拟 好理解多了) #include<bits/stdc++.h> using namespace std; #define ll long long #define ri register int #define N 3005 ll a[N]; int main() { freopen("fold.in","r",stdin); freopen("fold.out","w",stdout); ll n; int m; scanf("%lld%d",&n,&m); ll len=n; for(ri i=1;i<=m;++i) scanf("%lld",&a[i]); for

freopen()使用方法重定向版

断了今生、忘了曾经 提交于 2019-12-02 06:37:55
代码如下 #include<iostream> #include<cstdio> using namespace std; int main () { char a[100]; #define io//提交时删除这个 #ifdef io freopen("a.txt","r",stdin); //在程序文件 下创建a.txt 导入题目数据到里面 //freopen("aa.txt","w",stdout); //会自动在.cpp所在文件夹下创建一个aa.txt存入输出的数据 #endif cin>>a; cout<<a<<endl; return 0; } 来源: https://www.cnblogs.com/maxv/p/11734867.html

codeforces global round5 ABCD题解

醉酒当歌 提交于 2019-12-02 06:27:39
A. Balanced Rating Changes Description 给一个长度位n总和为0的一个序列,要求每个值除以2,对于奇数可以向上取整也阔以向下取整,且最终和依然为0 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> 13 #if __cplusplus >= 201103L 14 #include <unordered_map> 15 #include <unordered_set> 16 #endif 17 #include <vector> 18 #define lson rt << 1, l, mid 19 #define rson rt << 1 | 1, mid + 1, r 20 #define LONG_LONG_MAX 9223372036854775807LL 21 #define pblank

Codeforces Round #593 (Div. 2)

自古美人都是妖i 提交于 2019-12-02 03:32:41
Codeforces Round #593 (Div. 2) A. Stones 思路:水题 先取第一堆中的每一个和先取第二堆中的每一个进行比较就行了 AC代码 #include <algorithm> #include <iomanip> #include <iostream> #include <map> #include <math.h> #include <queue> #include <set> #include <sstream> #include <stack> #include <stdio.h> #include <string.h> #include <string> typedef long long ll; typedef unsigned long long ull; using namespace std; ll mult_mod(ll x, ll y, ll mod){ return (x * y - (ll)(x / (long double)mod * y + 1e-3) * mod + mod) % mod; } ll pow_mod(ll a, ll b, ll p){ ll res = 1; while (b){ if (b & 1) res = mult_mod(res, a, p); a = mult_mod(a, a, p); b >

codeforces #595 div3 题解

≡放荡痞女 提交于 2019-12-02 03:08:50
A. Yet Another Dividing into Teams Description 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 <queue> 10 #include <set> 11 #include <stack> 12 #if __cplusplus >= 201103L 13 #include <unordered_map> 14 #include <unordered_set> 15 #endif 16 #include <vector> 17 #define lson rt << 1, l, mid 18 #define rson rt << 1 | 1, mid + 1, r 19 #define LONG_LONG_MAX 9223372036854775807LL 20 #define ll LL 21 using namespace std; 22 typedef long long ll; 23 typedef long double

AtCoder Regular Contest 097

南笙酒味 提交于 2019-12-02 02:31:12
传送门 C - K-th Substring 题意: 给出一个字符串,求其第 \(k\) 小子串, \(k\leq 5\) 。 思路: 因为 \(k\) 很小,所以答案长度不可能超过 \(k\) 。所以直接将所有的长度不超过 \(k\) 的串拿出来排序就行。 Code #include <bits/stdc++.h> #define MP make_pair #define fi first #define se second #define sz(x) (int)(x).size() #define all(x) (x).begin(), (x).end() // #define Local using namespace std; typedef long long ll; typedef pair<int, int> pii; const int N = 5005; string s; int k; vector<string> v; void run() { v.clear(); cin >> s >> k; int len = s.length(); for(int i = 1; i <= k; i++) { for(int j = 0; j + i - 1 < len; j++) { v.push_back(s.substr(j, i)); } } sort(all(v

机房测试模拟1(day2):矩阵+树上贪心+bfs+状压

*爱你&永不变心* 提交于 2019-12-01 23:31:23
T1:入阵曲 n,m<=400,k<=1e6 分析: 考虑只有一行的情况: 将这一行求前缀和后,一段区间的和x=sum[r]-sum[l-1],如果x%k==0,那么sum[r]%k - sum[l-1]%k == 0 转化一下,也就是说: sum[r]与sum[l-1]在模k的意义下相等。 所以对于一行的来说,O(n)地for一遍,用一个桶记录一下模k意义下的值相同的个数,ans+=cnt[k]*(cnt[k]-1)/2 对于多行的来说,枚举上界和下界,再将这一块子矩阵对列求前缀和压缩成一列,转化成上面的问题。 复杂度:O(n^3) #include<bits/stdc++.h> using namespace std; #define N 405 #define M 1000005 #define ll long long #define ri register int int n,m,kk,ans=0,t[M],q[M]; ll a[N][N],l[N][N]; int main() { freopen("rally.in","r",stdin); freopen("rally.out","w",stdout); scanf("%d%d%d",&n,&m,&kk); for(ri i=1;i<=n;++i) for(ri j=1;j<=m;++j) scanf("%lld",

20191008+

这一生的挚爱 提交于 2019-12-01 19:40:56
前言 本场考试,感受颇深。 比如:语文是多么重要! 还有,一些情况下柿子不一定要化简,也可以化成更复杂但更有利于降低复杂度的柿子。 T1 树上主席树维护前驱,建出一棵新树,树上倍增即可。 时空复杂度$\Theta(NlogN)$。 #include<cstdio> #define L tr[k].lc #define R tr[k].rc using namespace std; int const N=1e5+5; int n,q; int head[N],Next[N<<1],to[N<<1],t; int w[N]; int Log[N],dep[N],f[N][19],tot; int dfn[N],id[N]; struct node{ int lc,rc,maxx; }tr[N*50]; int root[N],ct; inline int read(){ int ss(0);char bb(getchar()); while(bb<48||bb>57)bb=getchar(); while(bb>=48&&bb<=57)ss=(ss<<1)+(ss<<3)+(bb^48),bb=getchar(); return ss; } inline int max(int x,int y){ return x>y?x:y; } inline void add(int x,int

【2019.10.21】

点点圈 提交于 2019-12-01 19:08:04
日程表 ==签到题 用一个bool数组来记录这个点是否在日程表内 我会说我最开始是用的bitset吗 其实bitset能过... void Mod(ll &x){x>tnc?x%=tnc:x;} void Mod2(ll &x){x>P?x%=P:x;} int main(){ freopen("schedule.in","r",stdin); freopen("schedule.out","w",stdout); rd(n),rd(m),rd(a),rd(b),rd(c),nc=(ll)n*c,tnc=nc<<1; ll x=0,x0=0,cnt=0,tot=0; for(int i=1,nw;i<=m;++i){ x=a*x+b,Mod(x),nw=x/c+1; if(x<nc){ if(!vis[nw]) ++cnt,tot+=nw,Mod2(tot),vis[nw]=1; } else{ if(vis[nw-n]) --cnt,tot-=nw-n,Mod2(tot),vis[nw-n]=0; if(tot<0) tot+=P,Mod2(tot); } ans1+=cnt,Mod2(ans1),ans2+=tot,Mod2(ans2); } printf("%lld %lld",ans1,ans2); return 0; } 关联点 int up(int x,int st){

DP4 1014

怎甘沉沦 提交于 2019-12-01 18:49:13
烟火 城镇的主干道上有n个区域,从左到右编号为1到n,每个区域之间相距1个单位距离。在节日中要放m个烟火,第i个烟火会在ti时刻的ai区域放。如果在ti时刻你所处区域为x,那么你可以获得bi - | ai - x |的快乐值。在每个单位时间你可以移动不超过d个单位距离,初始的位置是任意的,求通过移动能获得快乐值和的最大值。 1 <= n <= 150000,1 <= m <= 300,1 <= d, ai <= n,1 <= bi, ti <= 10^9,对于i >= 2有ti >= ti-1。 题解 状态设计很简单f[i][j]表示看了i个烟火,在j的位置的最大快乐值。 f[i][j]=max{f[i-1][k]}+b[i]-|a[i]-j| k是一段连续的区间,并且对于同一个i长度固定,所以可以用单调队列维护,注意可以双向移动。 注意pos开long long #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define ll long long const int maxn=150005; const ll inf=1000000000000ll; int n,m; ll d; ll f[2][maxn]; int a[maxn],b