Codeforces Educational round 5
2016-01-15 20:19
330 查看
A:比较字符串的大小,去除前导零,没啥说的…
B:少见的B题A的人比A多,即选出最小值最大的一行,无语…
C:题意太麻烦,估计不是什么好题,就弃了..
D:题意:从序列A中选出一段,使得这一段中数的种类数<=k种,最大化这一段的长度。
也没啥好说的,如同莫队的思想,双端队列,每次r向右移一步,如果这时不符合条件了,就把l向右移到满足条件为止。
E:详见bzoj1257余数之和。
这道题无非就是改大了数据范围,中间的过程要记得多模,否则会爆longlong ,1257我是二分过的,在这儿就t惨了,急忙改了o(sqrt(n))的做法。
#include <iostream> #include <cstring> #include <cstdlib> #include <string> #include <cstdio> #include <algorithm> #include <cmath> #include <ctime> using namespace std; int A,B,lens,lent; char s[1000010],t[1000010]; int main() { gets(s + 1); gets(t + 1); A = 1; B = 1; lens = strlen(s + 1); lent = strlen(t + 1); while(s[A] == '0' && A <= lens) A ++; while(t[B] == '0' && B <= lent) B ++; if(A == lens + 1 && B == lent + 1) printf("="),exit(0); if(lens - A + 1 < lent - B + 1) printf("<"),exit(0); if(lens - A + 1 > lent - B + 1) printf(">"),exit(0); for(;A <= lens && B <= lent;A ++,B ++) { if(s[A] > t[B]) printf(">"),exit(0); if(s[A] < t[B]) printf("<"),exit(0); } printf("="); return 0; }
B:少见的B题A的人比A多,即选出最小值最大的一行,无语…
#include <iostream> #include <cstring> #include <cstdlib> #include <string> #include <cstdio> #include <algorithm> #include <cmath> #include <ctime> using namespace std; int n,m,a,Ans; int main() { scanf("%d%d",&n,&m); for(int i = 1;i <= n;i ++) { int ret = 2000000000; for(int j = 1;j <= m ;j ++) { scanf("%d",&a); ret = min (ret,a); } Ans = max(Ans,ret); } cout<<Ans; }
C:题意太麻烦,估计不是什么好题,就弃了..
D:题意:从序列A中选出一段,使得这一段中数的种类数<=k种,最大化这一段的长度。
也没啥好说的,如同莫队的思想,双端队列,每次r向右移一步,如果这时不符合条件了,就把l向右移到满足条件为止。
#include<iostream> #include<cstring> #include<cstdlib> #include<string> #include<cstdio> #include<algorithm> #include<cmath> #include<ctime> using namespace std; int n,k,A[500010],tot=0,num[1000010],Ans=0,head,a,b; int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&A[i]); head=1;num[A[1]]=1;tot=1;Ans=1;a=1,b=1; for(int i=2;i<=n;i++) { num[A[i]]++; if(num[A[i]]==1) tot++; while(tot>k) { num[A[head]]--; if(num[A[head]]==0) tot--; head++; } if(i-head+1>Ans) Ans=i-head+1,a=head,b=i; } printf("%d %d",a,b); return 0; }
E:详见bzoj1257余数之和。
这道题无非就是改大了数据范围,中间的过程要记得多模,否则会爆longlong ,1257我是二分过的,在这儿就t惨了,急忙改了o(sqrt(n))的做法。
#include<iostream> #include<cstring> #include<cstdlib> #include<string> #include<cstdio> #include<algorithm> #include<cmath> #include<ctime> #define Int long long #define Mod 1000000007 using namespace std; Int r,Ans=0,n,k; int main() { cin>>k>>n; if(n>k) Ans=Ans+(((n-k)%Mod)*(k%Mod))%Mod,n=k; for(Int i=1;i<=n;i=r+1) { r=k/(k/i); if(r>n) r=n; Int d=k/i,x=k%i,y=k%r,A,B; A=x+y; B=r-i+1; if(A%2==0) A=A/2; else B=B/2; Ans+=((A%Mod)*(B%Mod))%Mod; Ans%=Mod; } cout<<Ans; }
相关文章推荐
- link cut tree学习小记
- Java笔记9:Spring简单Demo
- leetcode 143. Reorder List
- Android中selector的使用
- 【LeetCode OJ 258】Add Digits
- Android 采用线程方法动态显示文字
- Tomcat剖析(五):Tomcat 容器
- Ubuntu14.04LTS上安装fcitx输入法
- 登录界面Linearlayout嵌套
- =="和Equals的区别
- python join字符连接函数的使用方法
- C#关于Clone()方法的介绍
- C++之路进阶——树链剖分/块状树(树的统计)
- Linux Is Not Matrix——keepalived安装
- ios基本图形绘制
- 建造者模式
- python的MySqldb使用
- 使用RandomAccessFile获取文件的MD5值
- javascript——四种函数调用形式
- Notepad++中代码格式化插件NppAStyle