群赛2总结-----2017.9.4
来源:互联网 发布:商城数据统计公式 编辑:程序博客网 时间:2024/06/05 22:51
- T1 Odds and Ends
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T2 Tell Your World
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T3 From Y to Y
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T4 Harmony Analysis
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T5 Bear and Prime Numbers
- 题意
- 解法
- 代码
- 网址这一题
- 小结
T1 Odds and Ends
题意:
将n个数字分成奇数份,每份首尾均为奇数,可以输出“Yes”。
解法:
循环递归。
代码:
#include<bits/stdc++.h>using namespace std;int x[1000000];bool y[100000];int main() { int a,b=0,c,tou=0,wei=0; cin>>a; c=a; y[a]=true; for(int i=0; i<a; i++) { cin>>x[i]; if(x[i]%2!=0) { y[i]=true; } }//cout<<a; if(y[0]!=true||a%2==0||y[a-1]!=true) cout<<"No"; else { while(wei!=c) { for(int i=a/2; i>=0; i--) if(y[tou]==true&&y[wei+i*2]==true&&y[wei+i*2+1]==true) { b++; y[tou]=false; y[wei+i*2]=false; tou=wei+i*2+1; wei=tou; a=a-2*i; } } if(b%2!=0) cout<<"Yes"; else cout<<"No"; } return 0;}
网址:这一题
小结:
**此类题目需要特判。**
T2 Tell Your World
题意:
输入n个数字,在平面上构成n个以(i,Xi)为坐标的点,问是否可以将这些点连成两条不重叠的平行线?可以输出"YES".
解法:
利用斜率.
代码:
#include<bits/stdc++.h> using namespace std; int s[3000],n; bool judge(double k) { int p=-1; for(int i=2; i<=n; i++) { if(s[i]-s[1]==(i-1)*k) continue; if(p==-1) p=i; else if(s[i]-s[p]!=(i-p)*k) return 0; } return p!=-1; } int main() { while(scanf("%d",&n)!=EOF) { for(int i=1; i<=n; i++) scanf("%d",&s[i]); if(judge(s[2]-s[1])||judge((s[3]-s[1])*1.0/2)||judge(s[3]-s[2])) printf("Yes\n"); else printf("No\n"); } }
网址:这一题
小结:
**此类题目需要特判。**
T3 From Y to Y
题意:
输入一个数字a,用特定的方法输出一串字符,使他的价值为a.(具体详见原题)
解法:
递归.
代码:
#include<bits/stdc++.h>using namespace std;int f(int a) { int x=0; x+=(a+1)*a/2; return x;}int main() { int a; char b='a'; cin>>a; if(a==0) cout<<b; else { while(a!=0) { for(int i=0; i<=477; i++) if(f(i)<=a&&f(i+1)>a) { a-=f(i); for(int j=1; j<=i+1; j++) cout<<b; b++; } } } return 0;}
网址:这一题
小结:
**此类题目需要特判。**
T4 Harmony Analysis
题意:
输入一个数字a,用特定的方法输出一串字符,使他的价值为a.(具体详见原题)
解法:
近似分型.
代码:
#include<bits/stdc++.h>using namespace std;char x[1000][1000];int main() { int a,b=2; x[1][1]='+'; x[1][2]='+'; x[2][1]='+'; x[2][2]='*'; cin>>a; if(a==0) {cout<<"+"; return 0; } while(a!=1) { for(int i=1; i<=b; i++) for(int j=1; j<=b; j++) { x[i+b][j]=x[i][j]; x[i][j+b]=x[i][j]; if(x[i][j]=='+') x[i+b][j+b]='*'; else x[i+b][j+b]='+'; } b=b*2; a--; } for(int i=1;i<=b;i++) { for(int j=1;j<=b;j++) cout<<x[i][j]; cout<<endl; } return 0;}
网址:这一题
小结:
**此类题目可以先手算找规律。**
T5 Bear and Prime Numbers
题意:
输入n,再输入n个整数,出入m,以下m行,每行2个整数,表示一个范围.输出范围内质数再数列n中出现的次数和.
解法:
筛法求质数+优化+暴力模拟.
代码:
#include<stdio.h> #include<string.h> #define M 10000010 int b[M],count[M]; bool visit[M]; int num=0; void init_prim() { memset(visit,true,sizeof(visit)); for(int i=2; i<M;++i) { if(visit[i]==true) { if(b[i])count[i]+=b[i]; for(int j=i*2; j<M; j+=i) { count[i]+=b[j]; visit[j]=false; } } } for(int i=2; i<M; i++) count[i]+=count[i-1]; } int main() { int n,q,l,r,s; init_prim(); while(scanf("%d",&n)!=EOF) { memset(b,0,sizeof(b)); for(int i=1; i<=n; i++) { scanf("%d",&s); b[s]++; } init_prim(); scanf("%d",&q); for(int cas=0; cas<q; cas++) { scanf("%d%d",&l,&r); if(l>M)l=M-1; if(r>M)r=M-1; printf("%d\n",count[r]-count[l-1]); } } return 0; }
网址:这一题
小结:
**此类题目需要特判。**
阅读全文
1 0
- 群赛2总结-----2017.9.4
- 群赛4总结----2017.9.6
- 群赛4总结
- 群赛5总结----2017.9.7
- 群赛6总结----2017.9.8
- 群赛7总结----2017.9.9
- 群赛8总结----2017.9.11
- 群赛2总结(误)
- 2017.9.4 栅栏 失败总结
- 2月4号总结
- 2017.9总结
- 群赛9总结----2017.9.16(奇怪题目)
- 总结4
- 总结4
- 总结4
- 总结4
- 总结4
- 总结4
- 改变浏览器位置
- WOJ1143-Part-time Job
- HDU6055——多校2017
- hibernate--事物机制(面试)
- 强大的滚动控件RecyclerView
- 群赛2总结-----2017.9.4
- java基础面试题
- Android Studio SVN使用
- python--两个list 求交\并\差集
- 找出数组中第一个重复的元素
- Centos7免密登陆配置
- xjoi奋斗群群赛2
- xxxxxxx模拟(1/?)暂时不写了
- callback回调函数