HDU4648 Magic Pen 6 签到
来源:互联网 发布:还原软件 编辑:程序博客网 时间:2024/06/05 02:31
题目链接:HDU4648
题目大意:给你n个数和一个模m,要求去掉连续的几个数后,这n个数的对m取模不变,求最多能去掉的个数。
AC代码:
/*2017年8月2日20:11:25HDU4648 签到 AC*/ #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;typedef long long ll;const int maxn=1e5+10;ll f[maxn],pre[maxn];ll n,m,res,x;int main(){while(~scanf("%I64d%I64d",&n,&m)){memset(f,0,sizeof(f));memset(pre,0,sizeof(pre));res=0;for(ll i=1;i<=n;i++){scanf("%I64d",&x);f[i]=f[i-1]+x;///pre[f[i]%m]=i;while(f[i]<0) f[i]+=m;if(!pre[f[i]%m]){if(f[i]%m) pre[f[i]%m]=i;else if(i>res) res=i;//判断0的情况,如果出现零的情况,直接记录下标 } /*出现同余情况,那么中间值的和一定是m的倍数*/ else if(i-pre[f[i]%m]>res){res=i-pre[f[i]%m];}}printf("%I64d\n",res);}return 0;}
下面贴一下集训队大神代码,跑的更快。
#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;const int maxn=1e5+10;int a[maxn];int pre[maxn];int n,m;int main(){cin.sync_with_stdio(0);while(cin>>n>>m){for(int i=1;i<=n;i++) cin>>a[i];for(int i=0;i<m;i++) pre[i]=0;int sum=0,ans=0; for(int i=1;i<=n;i++){sum=((sum+a[i])%m+m)%m;if(sum==0) ans=i;if(pre[sum]) ans=max(ans,i-pre[sum]);else pre[sum]=i;}cout<<ans<<endl;} return 0;}
阅读全文
0 0
- HDU4648 Magic Pen 6 签到
- Magic Pen 6(hdu4648,贪心)
- 多校 Magic Pen 6
- 4043. Magic Pen 6
- hdu 4648 Magic Pen 6
- HDU 4648 Magic Pen 6
- hdu - 4648 - Magic Pen 6
- hdu 4648 Magic Pen 6
- HDU 4648 Magic Pen 6
- HDU 4648 Magic Pen 6
- hdu 4648Magic Pen 6
- hdoj 4648 Magic Pen 6
- HDU 4648 Magic Pen 6
- magic pen!
- hdu 4648 - Magic Pen 6(“水”题)
- hdu 4649 Magic Pen 6 解题报告
- HDOJ 题目4648 Magic Pen 6(水题)
- hdu 4648 Magic Pen 6(贪心)
- 类和对象
- hdu-2056-Rectangles
- Dubbox 构建Restful服务
- python3常用快捷键——将在学习中不断更新
- jdk 源码分析(6)java BitSet结构
- HDU4648 Magic Pen 6 签到
- [转载自知乎——有哪些令人拍案叫绝的算法?] [侵必付] 关于位运算
- 【PAT】【Advanced Level】1037. Magic Coupon (25)
- 其他对象——math
- 背包问题*
- C++ const的用法详解
- Nginx教程-日志配置
- hah
- C++基本概念复习之一:枚举、引用、指针、类、多态