2015 Multi-University Training Contest 1
2015-07-21 18:59
411 查看
A. 简单题
B. 数据结构题目
#include<bits/stdc++.h> const int N=100010; #define LL long long #define MOD 1000000007 using namespace std; int a ; int L ,R ; int M1 ,M2 ; LL work(LL l, LL r, LL k,int n) { LL ans; l++; r--; ans=((k-l+1)*(r-k+1))%MOD; return ans; } int main() { int n,l,r; LL ans; while(scanf("%d",&n)!=EOF) { ans=0; //map<int,int> M1, M2; for (int i=1;i<=n;i++) M1[i]=M2[i]=0; for (int i=1;i<=n;i++) scanf("%d",&a[i]); for (int i=1;i<=n;i++) { l=0; for (int j=1;j<=(int)sqrt(a[i]+0.5);j++) if (a[i]%j==0) { int j1=j,j2=a[i]/j; //if (M1.find(j1)!=M1.end()) l=max(M1[j1],l); //if (M1.find(j2)!=M1.end()) l=max(M1[j2],l); if (M1[j1]) l=max(M1[j1],l); if (M1[j2]) l=max(M1[j2],l); } //if (M1.find(a[i])==M1.end()) M1.insert(make_pair(a[i],i)); else M1[a[i]]=i; M1[a[i]]=i; L[i]=l; } for (int i=n;i>=1;i--) { r=n+1; for (int j=1;j<=(int)sqrt(a[i]+0.5);j++) if (a[i]%j==0) { int j1=j,j2=a[i]/j; //if (M2.find(j1)!=M2.end()) r=min(M2[j1],r); //if (M2.find(j2)!=M2.end()) r=min(M2[j2],r); if (M2[j1]) r=min(M2[j1],r); if (M2[j2]) r=min(M2[j2],r); } //if (M2.find(a[i])==M2.end()) M2.insert(make_pair(a[i],i)); else M2[a[i]]=i; M2[a[i]]=i; R[i]=r; } for (int i=1;i<=n;i++) ans=(ans+work((LL)L[i],(LL)R[i],(LL)i,n))%MOD; printf("%I64d\n",ans); } return 0; }
B. 数据结构题目
#include<bits/stdc++.h> #define LL long long using namespace std; struct node { LL value; int index; node(LL value,int index):value(value),index(index){} bool operator<(const node &b)const { return (this->value>b.value); } }; //set<node> S; set<LL> S; int j,n; LL k; LL a[100010]; void work(set<LL>::iterator now, LL value,int index,int flag) { //set<node>::iterator tmp; set<LL>::iterator tmp; if (flag==1) now--; //while (abs((*now).value-value)>=k) while (abs((*now)/1000000-value)>=k) { //int val = (*now).index; int val = (*now)%1000000; while (j != val) { //S.erase(node(a[j],j)); S.erase(a[j]*1000000+j); j++; } tmp=now; if (flag==1) now--; else now++; S.erase(tmp); j++; if (S.size()==0) { if (flag==-1) S.clear(); return; } } } int main() { int T; scanf("%d",&T); while(T--) { LL ans=0; S.clear(); j=0; scanf("%d%I64d",&n,&k); for (int i=0;i<n;i++) { scanf("%I64d",&a[i]); if (S.size()>0) work(S.end(),a[i],i,1); if (S.size()>0) work(S.begin(),a[i],i,-1); ans=ans+S.size()+1; //S.insert(node(a[i],i)); S.insert(a[i]*1000000+i); } printf("%I64d\n", ans); } return 0; } /* 1 10 5 0 3 4 5 2 1 6 7 8 9 */
相关文章推荐
- 4.设计一个Email邮箱注册应用程序。要求:用户输入完成单击“立即注册”按,判断“密码”和“确认密码”文本框内容是否一致,如果一致在立即注册按钮上方显示用户输入的邮件地址,运行结果如图所示。
- 2015 Multi-University Training Contest 1 Tricks Device
- hdu 5289 Assignment 2015 Multi-University Training Contest 1
- 7.第三单元任务四实训:方法setId能为类的属性:id(身份证号码)设置值,当给定的值长度为18时,赋值给id,当值长度不是18时,抛出IllegalArgumentException异常。在mai
- ERROR 1194 (HY000): Table 't1' is marked as crashed and should be repaired
- ohasd failed to start错误解决办法
- hdu 5294 Tricks Device 2015 Multi-University Training Contest 1
- 4.第三单元任务三实训:编写一个类ExceptionTest,在main方法中使用try-catch-finally语句结构实现:在try语句块中,编写两个数相除操作,相除的两个操作数要求程序运行时用
- rails 中使用fusionchart的图表导出功能
- Quartz 2.2.1学习笔记 (二) Jobs、JobDetail、JobDataMap
- 2015 Multi-University Training Contest 1
- Failed to fetch URL http://dl-ssl.google.com************
- hdu 1023 Train Problem II (卡特兰数)
- HDU 2473Junk-Mail Filter 【并查集,删点】
- 注册表-在IE上永久显示我的名字"www.baidu.com - 朱建强"
- Email正则匹配
- Leetcode #70 Climbing Stairs
- 【算法渣渣的逆袭之路】Property Distribution Aizu - 0118
- int main(int argc,char* argv[])详解
- HDOJ Air Raid 1151【最小路径覆盖】