getchar

Educational Codeforces Round 48

不问归期 提交于 2020-01-20 01:27:54
题目地址 Edu48 A.Death Note 翻译 你有一个无穷页的本子,每一页可以写 \(m\) 个名字, 你在第 \(i\) 天要写 \(a_i\) 个名字,如果这一页恰好写满了,你就会翻页, 问每天的翻页次数。 题解 傻逼题,求个前缀和,然后除 \(m\) 计算前缀翻页次数,再和前面一天减一下就好。 代码 #include<cstdio> #define ll long long #define MAX 200200 inline int read() { int x=0;bool t=false;char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=true,ch=getchar(); while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar(); return t?-x:x; } int n,m; ll a[MAX]; int main() { n=read();m=read(); for(int i=1;i<=n;++i)a[i]=read()+a[i-1]; for(int i=1;i<=n;++i)a[i]/=m; for(int i=1;i<=n;++i)printf("%I64d ",a[i]-a[i-1]); return

Codeforces Round #614 (Div. 2)

纵饮孤独 提交于 2020-01-20 00:48:38
A. ConneR and the A.R.C. Markland-N (CF 1293 A) 题目大意 \(n\) 层楼,每层都有个餐厅,但有 \(k\) 个餐厅不开放,分别在 \(a_i\) 层, \(Colin\ "ConneR"\ Neumann\ Jr\) 在第 \(s\) 层,现在他要去吃午饭,问他去餐厅最小的跨楼层是多少? 解题思路 \(n\) 巨大但 \(k\) 很小,用 \(set\) 储存 \(a_i\) ,拿两个指针从 \(s\) 往上往下扫到没有关闭的餐厅的即可。 神奇的代码 #include <bits/stdc++.h> #define MIN(a,b) ((((a)<(b)?(a):(b)))) #define MAX(a,b) ((((a)>(b)?(a):(b)))) #define ABS(a) ((((a)>0?(a):-(a)))) using namespace std; int main(void) { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int kase; cin>>kase; for (int i = 1; i <= kase; i++) { int n,s,k; cin>>n>>s>>k; set<int> qwq; for(int u,i=1;i<=k;++i

8.10 NOIP模拟测试16 Blue+Weed+Drink

孤者浪人 提交于 2020-01-20 00:34:20
T1 Blue 贪心,每次跳得时候跳能跳到的最远的地方,跳过的就把他设为0,每次二分找到位置,一直跳就行,如果能跳到的位置就是当前位置或比当前位置还小(数组里现在呆着的这一块石头,二分得到的就是当前位置,-1就比当前位置小了。但由于0的影响,while回退很慢,所以改用支持earse操作的set,可以水过他(这是T40和AC的区别!!!) #include<iostream> #include<cstdio> #include<cstring> #include<set> #include<algorithm> using namespace std; int T,n,m,d,l; set<int>st; set<int>::iterator it; int read() { int aa=0,bb=1;char cc=getchar(); while(cc>'9'||cc<'0'){if(cc=='-') bb=-1;cc=getchar();} while(cc<='9'&&cc>='0'){aa=aa*10+cc-'0';cc=getchar();} return aa*bb; } int main() { T=read(); while(T--){ st.clear(); n=read();m=read();d=read(),l=read(); bool flag=0

lxs Contest #120 2020.1.19

霸气de小男生 提交于 2020-01-19 23:59:41
https://file.floj.tech/export/nYGAiM5E4Y4e15467bb2 t1 图 【题意】 给定无向连通图,判断它是否能被适中颜色染成使每个边所连的两个点颜色不同。如果不能则找出删去后原图仍然连通的奇环。 【题解】 先找出原图一颗生成树,黑白染色使相邻的点颜色不同。在剩下的边上如果是一个二分图,则可以,否则有奇环。dfs并将沿途点再次黑白染色。如果染不了力则向上跳父亲知道跳到对面的点,这就是奇环。否则将染好的色输出即可。 代码如下: #include<bits/stdc++.h> using namespace std; const int N=3e5+5; bool pan; int n,m,last[N],last3[N],size3,st[N],top,size=1,ans[N],ge,last2[N],size2,siz,fa[N],ans1; int book[N],ji[N<<1]; struct pigu { int dao,ne; }a[N<<1],b[N<<1],c[N<<1]; inline void lingjiebiao2(int x,int y) { b[++size2].dao=y; b[size2].ne=last2[x]; last2[x]=size2; } inline void lingjiebiao(int x

Codeforces Global Round 3

末鹿安然 提交于 2020-01-19 10:51:49
Codeforces Global Round 3 A. Another One Bites The Dust 有若干个 a ,有若干个 b ,有若干个 ab 。你现在要把这些串拼成一个串,使得任意两个相邻的位置都是不同字符,求可能的最长串长度。 枚举一下 \(a\) 开头还是 \(b\) 开头,那么接下来就被唯一确定了。 #include<iostream> #include<cstdio> using namespace std; int a,b,c;long long ans; int main() { scanf("%d%d%d",&a,&b,&c); ans=0ll+c*2+min(a,b+1)+min(a,b); if(b)--b,ans=max(ans,1ll+c*2+min(a,b+1)+min(a,b)); printf("%lld\n",ans); return 0; } B. Born This Way 有 \(n\) 个航班从 \(A\) 前往 \(B\) ,起飞时间分别是 \(a_1,a_2,...,a_n\) ,飞行时间都是 \(t_a\) 。有 \(m\) 个航班从 \(B\) 前往 \(C\) ,起飞时间分别是 \(b_1,b_2,...,b_m\) ,飞行时间是 \(t_b\) 。现在有一个人要从 \(A\) 到 \(C\) ,你可以取消不超过 \

【luogu】p2058 海港

亡梦爱人 提交于 2020-01-18 22:19:44
洛谷传送门 题目描述 小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。 小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第i艘到达的船,他记录了这艘船到达的时间ti (单位:秒),船上的乘 客数ki,以及每名乘客的国籍 $ x_{i,1}, x_{i,2},…,x_{i,k}$ 小K统计了n艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的国家。 形式化地讲,你需要计算n 条信息。对于输出的第i i 条信息,你需要统计满足 $ t_i-86400<t_p \le t_i \(的船只p,在所有的\) x_{p,j}$中,总共有多少个不同的数。 分析 大致思路还是很好想的, 我们开一个数组barrel作为一个桶,barrel[i]表示国籍为i的人有多少个, 每加入一个船,对于船中的人x 如果barrel[x]等于0,则证明又多了一个新国籍的人, barrel[x]每次都加上1 并且我们找出 新增的相距时间超出24的船 把这些船上的乘客在最终答案里减去, 减掉的过程中如果有一个国籍的人被减为0则ans--; 然后就是一个要注意的地方 我们存储这些乘客的信息如果用一个二维数组来存储他所对应的的船和国籍的话空间显然不够用。

CF训练

醉酒当歌 提交于 2020-01-18 19:52:46
CF 612 div1 三道大水题 A 题解 dp,用 $ f[i][j][0/1]$ 表示到第 \(i\) 个空格且一共填了 \(j\) 个奇数,末尾为奇数或偶数的最小值 转移见代码 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define ll long long using namespace std; int read() { int k=0,f=1;char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) k=k*10+c-'0';return k*f; } int n,x,y,a[500],f[105][105][2]; int tot,pos[500]; int main() { n=read(); y=n/2;x=n-y; for(int i=1;i<=n;i++) { a[i]=read(); if(a[i]&1) x--; else if(a[i]!=0) y--; else pos[++tot]=i; } memset(f,0x3f,sizeof(f)); if(pos[1]==1) { f[1][1][1]=f[1][0][0

SSL新年欢乐赛暨BPM退役赛

谁说我不能喝 提交于 2020-01-17 22:36:20
目录 前言 C 大水题 题目 分析 代码 D 简单数据结构题 题目 分析 代码 G 简单01背包题 题目 分析 (解题报告) 前言 A,B水题,E,I原题 实际赛时400分(乐多毁我青春) C 大水题 题目 如果有一个长度为 \(n\) 的数组 \(a[1],a[2],\cdots,a[n]\) ,对于非负整数 \(k\) ,若令 \(b[i]=a[i] \oplus k\) ,满足b b 是一个单调不下降的数组,即满足 \(b[1]\le b[2]\le \cdots \le b[n]\) ,则称 \(k\) 是数组 \(a\) 的完美数,其中 \(\oplus\) 表示按位异或。 现在给出一个长度为 \(n\) 的数组 \(a\) ,并进行 \(q\) 次修改,每次会改变 \(a\) 中的一个数。要求在第一次修改前以及每一次修改后求出当前数组的最小完美数,若不存在则输出 \(-1\) 。 分析 从局部到整体考虑,如果相邻两个数 \(x,y\) ,改变这两个数大小关系当且仅当一个二进制位是0一个是1的最高位被改变,那么可以用两个数组表示某个位置是否必然改变或必然不改变,累加次数,它待修改就先减掉再加上修改后的情况,如果两个数组的某一位都大于0,那么必然输出 \(-1\) ,接着只要必然修改的位置数组大于0,那么就必须要让这一位变成1,时间复杂度 \(O(30(n+q))\) 代码

【NOIP2007 提高组】模拟

强颜欢笑 提交于 2020-01-17 21:32:32
/*垃圾话写在前面*/ 听说期末考试成绩出来了,然而我的内心一片 平静,(因为我知道我的人生圆满。。。。。。。。结束le); 2020.1.17 A.统计数字 题目描述 某次科研调查时得到了 nn n个自然数,每个数均不超过 1500000000(1.5×109)1500000000(1.5 \times 10^9) 1 5 0 0 0 0 0 0 0 0 ( 1 . 5 × 1 0 9 )。已知不相同的数不超过 1000010000 1 0 0 0 0个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 输入格式 共 n+1n+1 n + 1行。 第一行是整数 nn n,表示自然数的个数; 第 22 2至 n+1n+1 n + 1每行一个自然数。 输出格式 共 mm m行( mm m为 nn n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。 每行输出 22 2个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。 输入输出样例 输入 #1 8 2 4 2 4 5 100 2 100 输出 #1 2 3 4 2 5 1 100 2 说明/提示 40%40\% 4 0 %的数据满足: 1≤n≤10001 \le n \le 1000 1 ≤ n ≤ 1 0 0 0 80%80\% 8 0 %的数据满足: 1≤n≤500001 \le n

[APIO/ctsc2007]

核能气质少年 提交于 2020-01-17 07:56:32
A.风铃 给一棵二叉树,叶子结点是玩具,为使你的弟弟满意,你需要选一个满足下面两个条件的风铃: (1) 所有的玩具都在同一层(也就是说,每个玩具到天花板之间的杆的个数是一样的)或至多相差一层。 (2) 对于两个相差一层的玩具,左边的玩具比右边的玩具要更靠下一点。 你可以交换一个非叶子节点的左右孩子,问至少要交换多少次可以满足或者输出无解。 非叶子节点不超过100000个 题解:题目的限制条件很多,因此很多情况都是无解的,都特判一下。 以下代码卡时间卡空间卡到bzojRank1了 #include<iostream> #include<cstdio> #define getchar() (*S++) #define pa pair<int,int> #define mk(x) make_pair(x,x) #define mp(x,y) make_pair(x,y) #define MN 100000 using namespace std; char B[1<<23],*S=B; inline int read() { int x = 0; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-'){getchar();return -1;} ch = getchar();} while(ch >= '0' &&