2015年江西理工大学C语言程序设计竞赛(高级组)
A
解法:DP+二分
dp[i]=max(dp[i],dp[j]+p[i].v)(i>j)
dp[i]表示建立i点之后能够获得的最大值
int n,M; struct node
{
int l,v;
}p[];
int dp[]; bool cmp(node a,node b){
return a.l < b.l;
} bool judge_oo(){
int Max = -;
for(int i = ;i <= n;i++) Max = max(Max,p[i].v);
if(Max >= M) return ;
return ;
} bool judge_no(){
int sum = ;
for(int i = ;i <= n;i++) sum += p[i].v;
if(sum >= M) return ;
return ;
} bool judge_DP(int L){
memset(dp,,sizeof dp);
for(int i = ;i <= n;i++){
for(int j = ;j < i; j++){
if(p[i].l - p[j].l >= L){
dp[i] = max(dp[i],dp[j] + p[i].v);
}
}
}
int ML = ;
for(int i = ;i <= n;i++) ML = max(ML,dp[i]);
if(ML >= M) return ;
return ;
} int solve(int L,int R){
while(L + < R){
int mid = (L + R)/;
if(judge_DP(mid)) L = mid;
else R = mid;
}
return L;
} int main(int argc, char *argv[])
{
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
int T;
cin >> T;
while(T--){
cin >> n >> M;
for(int i = ;i <= n;i ++)
cin >> p[i].l >> p[i].v;
if(judge_no()){
puts("-1");
continue;
}
if(judge_oo()){
puts("oo");
continue;
}
sort(p+,p+n+,cmp);
p[].l = - , p[].v = ;
int L = , R = p[n].l;
cout << solve(L,R) << endl;
}
return ;
}
B
解法:模拟。字符串模拟
#include<stdio.h>
//#include<bits/stdc++.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<sstream>
#include<set>
#include<queue>
#include<map>
#include<vector>
#include<algorithm>
#include<limits.h>
#define inf 0x3fffffff
#define INF 0x3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define ULL unsigned long long
using namespace std;
int i,j;
int n,m;
int num_1,num_2;
int t;
int sum,ans,flag;
string s_1,s_2,s_3;
string sss;
string ss[10000];
string c;
map<string,int>q1;
map<string,int>q2;
int main()
{
cin>>t;
while(t--)
{
cin>>n>>c;
num_1=0;
for(i=0; i<n; i++)
{
cin>>sss;
ans=sss.find(".");
s_1=sss.substr(0,ans);
s_2=sss.substr(ans+1,sss.length());
if(s_2==c)
{
int ans_2=sss.find("(");
int ans_3=sss.find(")");
if((ans_2!=-1&&ans_2<ans_3))
{
// num_1++;
ss[num_1++]=sss.substr(0,ans_2);
// cout<<sss.substr(0,ans_2)<<endl;
}
else if(ans_2==-1||ans_3==-1)
{
// num_1++;
ss[num_1++]=sss.substr(0,ans);
// cout<<sss.substr(0,ans)<<endl;
}
}
}
for(i=0; i<num_1; i++)
{
// cout<<ss[i]<<"A"<<endl;
}
// cout<<num_1<<endl;
for(i=0; i<num_1; i++)
{
q1[ss[i]]++;
}
for(i=0; i<num_1; i++)
{
if(q2[ss[i]]==0)
{
q2[ss[i]]=1;
if(q1[ss[i]]==1)
{
cout<<ss[i]<<"."<<c<<endl;
}
else
{
cout<<ss[i]<<"."<<c<<" "<<q1[ss[i]]<<endl;
}
}
}
q1.clear();
q2.clear();
}
return 0;
}
C
解法:树状数组寻找逆序对+预处理
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath> using namespace std; const int M = ; long long ans[M + ];
int G[M + ],c[M + ]; int Lowbit(int x)
{
return x & (-x);
} void Insert(int x,int d)
{
while(x<=M){
c[x]+=d;
x+=Lowbit(x);
}
} int Sum(int x)
{
int sum=;
while(x>){
sum+=c[x];
x-=Lowbit(x);
}
return sum;
} void init()
{
memset(G,-,sizeof G);
memset(ans,,sizeof ans);
memset(c,,sizeof c);
G[] = ;
for(int i = ; i <= ;i++){
if(G[i] == -){
for(int j = i;j <= ;j += i){
if(G[j] == -){
G[j] = i;
}
}
}
}
for(int i=;i<=;i++)
{
Insert(G[i],);
ans[i] = ans[i-] + (i-Sum(G[i]));
}
} int main()
{
init();
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
cout<<ans[n]<<endl;
}
return ;
}
D
解法:模版题,最小覆盖圆
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const double eps=1e-;
struct Point{
double x,y;
}p[];
double dis(const Point &a,const Point &b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
Point circumcenter(const Point &a,const Point &b,const Point &c)
{ //返回三角形的外心
Point ret;
double a1=b.x-a.x,b1=b.y-a.y,c1=(a1*a1+b1*b1)/;
double a2=c.x-a.x,b2=c.y-a.y,c2=(a2*a2+b2*b2)/;
double d=a1*b2-a2*b1;
ret.x=a.x+(c1*b2-c2*b1)/d;
ret.y=a.y+(a1*c2-a2*c1)/d;
return ret;
}
void min_cover_circle(Point *p,int n,Point &c,double &r){ //c为圆心,r为半径
random_shuffle(p,p+n); //
c=p[]; r=;
for(int i=;i<n;i++)
{
if(dis(p[i],c)>r+eps) //第一个点
{
c=p[i]; r=;
for(int j=;j<i;j++)
if(dis(p[j],c)>r+eps) //第二个点
{
c.x=(p[i].x+p[j].x)/;
c.y=(p[i].y+p[j].y)/;
r=dis(p[j],c);
for(int k=;k<j;k++)
if(dis(p[k],c)>r+eps) //第三个点
{//求外接圆圆心,三点必不共线
c=circumcenter(p[i],p[j],p[k]);
r=dis(p[i],c);
}
}
}
}
}
int main(){
int n;
Point c;
double r;
int t;
cin>>t;
while(t--)
{
cin>>n;
for(int i=; i<n; i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
min_cover_circle(p,n,c,r);
printf("%.1f %.1f\n",c.x,c.y);
} return ;
}
2015年江西理工大学C语言程序设计竞赛(高级组)的更多相关文章
- 2014江西理工大学C语言程序设计竞赛高级组题解
1001 Beautiful Palindrome Number 枚举回文数字前半部分,然后判断该数字是否满足,复杂度为O(sqrt(n))! 1002 Recovery Sequence 本题的核 ...
- 2017年江西理工大学C语言程序设计竞赛(高级组)
问题 A: 求近似值 #include <stdio.h> #include <time.h> #include <stdlib.h> using namespac ...
- 2018年江西理工大学C语言程序设计竞赛(高级组) 三角平方数
题目描述 三角数:形如图a,圆点摆放成等边三角形的数字,则为三角数. (图a) 平方数:形如图b,小方块摆放成正方形的数字,则为平方数. (图b) 那么如果一个数字既是三角形数又是平方数,则称为三角平 ...
- 2018年江西理工大学C语言程序设计竞赛高级组部分题解
B Interesting paths 考察范围:组合数学 此题是机器人走方格的变种,n*m的网格,从(1,1)走到(n,m),首先可以明确,水平要走m-1格,竖直要走n-1格,则走到目的地的任意一条 ...
- 2018年江西理工大学C语言程序设计竞赛(初级组)一
C语言竞赛初级组第一.二场答案:https://www.cnblogs.com/xingkongyihao/p/10046918.html A: 逆序对 时间限制: 1 s 内存限制: ...
- 2015年江西理工大学C语言程序设计竞赛(初级组)
JankTao相亲记 解法:排序 #include<stdio.h> #include<string.h> #include<iostream> #include& ...
- 2017年江西理工大学C语言程序设计竞赛(初级组)
问题 A: Petr的盒子(初) #include <iostream> #include <stdio.h> #include <algorithm> using ...
- 2014江西理工大学C语言程序竞赛高级组
Beautiful Palindrome Number 题意:求N里面有多少个符合要求的数字(数字要求:回文数,且前一半部分是不严格递增) 解法:打表 #include<bits/stdc++. ...
- 2016年江西理工大学C语言程序设计竞赛(高级组)
问题 A: jxust 解法:争议的问题(是输入整行还是输入字符串),这里倾向输入字符串,然后判断是否含有jxust就行 #include<bits/stdc++.h> using nam ...
随机推荐
- 2016HUAS暑假集训训练题 E - Rails
There is a famous railway station in PopPush City. Country there is incredibly hilly. The station wa ...
- C语言100道经典算法
经典的100个c算法 C语言的学习要从基础,100个经典的算法真不知道关于语言的应该发在那里,所以就在这里发了,发贴的原因有2个,第一个,这东西非常值得学习,第二个,想..........嘿嘿,大家应 ...
- 连连看bug记录
1.bug统计 bug1: bug现象:消除两个相同图案之间的连线跨越了其他图片. 期待现象:应该改成绕过图案呈折线形. 二者差异:折现有没有穿过其他图片. bug原因猜测:小组能力原因. 复现步骤或 ...
- c#根据后台数据,自动生成checkbox
前端在aspx中,添加生成checkbox的容器div: <div id="container" runat="server"></div&g ...
- 基于 ThinkPHP 3.2.3 的页面静态化功能的实现
PHP 的页面静态化有多种实现方式,比如使用输出缓冲(output buffering),该种方式是把数据缓存在 PHP 的缓冲区(内存)中,下一次取数据时直接从缓冲区中读取数据,从而避免了脚本的编译 ...
- Java学习——增强for循环、switch
增强for循环 Java5引入了一种主要用于数组的增强型for循环. 例子 public class ForTest { public static void main(String args[]){ ...
- Salted hash password
参考文档 http://www.cnblogs.com/richardlee/articles/2511321.html https://en.wikipedia.org/wiki/Salt_%28c ...
- 学习OpenCV——行人检测&人脸检测(总算运行出来了)
之前运行haar特征的adaboost算法人脸检测一直出错,加上今天的HOG&SVM行人检测程序,一直报错. 今天总算发现自己犯了多么白痴的错误——是因为外部依赖项lib文件没有添加完整,想一 ...
- 读取input:file的路径并显示本地图片的方法
<!doctype html> <html> <head> <meta content="text/html; charset=UTF-8" ...
- VI中的多行删除与复制
VI中的多行删除与复制 法一: 单行删除,:(待删除行)d 多行删除 ,:,10d 法二: 光标所在行,dd 光标所在行以下的N行,Ndd 方法1: 光标放到第6行, 输入:2yy 光标放到第9行, ...