入门赛7
来源:互联网 发布:java哪个版本稳定 编辑:程序博客网 时间:2024/05/18 00:50
- 前言
- T1 Bachgold Problem
- 题面
- 题意
- 思路
- 代码
- 小结
- T2 Parallelogram is Back
- 题面
- 题意
- 思路
- 代码
- 小结
- T3 Voting
- 题面
- 题意
- 思路
- 代码
- 小结
- T4 Secrets
- 题面
- 题意
- 思路
- 代码
- 小结
- T5 Chips
- 题面
- 题意
- 思路
- 代码
- 小结
- 总结
前言
AK啦啦啦~~~~!!!!!
本题涉及题目:
A: [Bachgold Problem]B: [Parallelogram is Back]
C: [Voting]
D: [Secrets]
E: [Chips]
T1 Bachgold Problem
题面
原题地址: [A]
题意
将一个数分解成若干个质数,使质数的个数最多
思路
偶数输出2,奇数输出2和一个3。
代码
#include<bits/stdc++.h>using namespace std;int n;int main(){ scanf("%d",&n); printf("%d\n",n/2); if(n&1) { for(int i=1;i<=n/2-1;i++) { printf("2 "); } printf("3"); } else { for(int i=1;i<=n/2;i++) printf("2 "); } return 0;}
小结
水题*1
T2 Parallelogram is Back
题面
原题地址: [B]
题意
给出三个点,求以这三个点为顶点的平行四边形的第四个点。
思路
暴力,公式。
代码
#include<bits/stdc++.h>using namespace std;int x1,x2,x3,y11,y2,y3;int main(){ scanf("%d%d%d%d%d%d",&x1,&y11,&x2,&y2,&x3,&y3); printf("3\n"); printf("%d %d\n",x1-x2+x3,y11-y2+y3); printf("%d %d\n",x1+x2-x3,y11+y2-y3); printf("%d %d\n",x2+x3-x1,y2+y3-y11); return 0;}
小结
水题*2
T3 Voting
题面
原题地址: [C]
题意
每个D都可以杀掉其后面的任意一个R,从1~n重复执行,直到有一方死绝。
思路
由于每一步都是最优,所以D只会杀掉其后面的第一个R。
于是可以组两个队列,队列开头的D必定会杀掉队列开头的R(或R杀D),由于重复执行,所以D杀完R后又要到队列末尾。
代码
#include<bits/stdc++.h>using namespace std;queue<int> D,R;int n,i,d,r;char c;int main(){ for(scanf("%d\n",&n),i=0;i<n;i++) scanf("%c",&c),c=='D'?D.push(i):R.push(i); while(!D.empty()&&!R.empty()) { d=D.front(),r=R.front(); D.pop(),R.pop();//以出现的顺序决定生死; d<r?D.push(n+d):R.push(n+r);//+n是放到队尾后将顺序值提高; } D.empty()?printf("R"):printf("D");//看看哪方over了; return 0;}
小结
水题*3
T4 Secrets
题面
原题地址: [D]
题意
你只能用一种硬币,且不能刚好凑出n,使使用硬币个数最大。
硬币面值为1,3,3^2,3^3,……
思路
找出n不能整除的最小硬币面值,然后全部用这个硬币。
代码
#include<bits/stdc++.h>using namespace std;long long n,a=3;int main(){ scanf("%lld",&n); while(!(n%a)) a*=3; printf("%lld",n/a+1); return 0;}
小结
水题*4
T5 Chips
题面
原题地址: [E]
题意
有一个n*n个棋盘,你有无数个棋子,有k个坏点,棋子是能从一条边到对边(棋盘的角不能放),不能经过坏点。
思路
行数组和列数组储存列和行的第i个能不能放棋子。
代码
#include<bits/stdc++.h>#define N 1000using namespace std;int n,i,x,y,ans,k;bool X[N+5],Y[N+5];int main(){ memset(X,true,sizeof(X)); memset(Y,true,sizeof(Y)); for(scanf("%d%d",&n,&k),i=0;i<k;i++) { scanf("%d%d",&x,&y); X[x]=false; Y[y]=false; } for(i=2;i<n;i++) { if(X[i]) ans++; if(Y[i]) ans++; } if(n&1&&X[(n+1)>>1]&&Y[(n+1)>>1]) ans--;//只有n为单数时中间的列和行有可能撞到。 printf("%d",ans); return 0;}
小结
水题*5
总结
水题*n
阅读全文
0 4
- 入门赛7
- 入门赛2
- 入门赛3
- 入门赛4
- 入门赛5
- 入门赛6
- 入门赛8
- 入门赛9
- 入门赛10
- 入门赛11
- 入门赛12
- PHP入门学习7
- Python入门7
- 入门学习7:超链接
- 汇编入门总结(7)
- Java 7入门经典
- MPEG-7实例入门
- MPEG-7实例入门
- cocos2d-x main.h详解
- JavaScript中的类与对象
- WOJ1294-数老鼠
- mybatis学习之路----框架搭建
- Android 4.1 Netd 详细分析系列
- 入门赛7
- MySQL(五)之DDL(数据定义语言)与六大约束
- deferred对象详细解读
- cookie和session的联系和区别
- LeetCode--Permutation Sequence
- React Native
- C# 单例设计模式
- 数据结构与算法
- 51Nod 1298 圆与三角形