Codeforces Beta Round#2
Codeforces Beta Round#2
http://codeforces.com/contest/2
A
模拟题
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; map<string,ll>mp;
struct sair{
string str;
int id;
ll num;
}a[]; bool cmp(sair a,sair b){
if(a.num==b.num) return a.id<b.id;
return a.num>b.num;
} int main(){ int n;
cin>>n;
string ans;
ll Max=-0x3f3f3f3f;
for(int i=;i<=n;i++){
cin>>a[i].str>>a[i].num;
a[i].id=i;
}
for(int i=;i<=n;i++){
mp[a[i].str]+=a[i].num;
a[i].num=mp[a[i].str];
}
for(int i=;i<=n;i++){
if(mp[a[i].str]>Max){
Max=mp[a[i].str];
}
}
sort(a+,a+n+,cmp);
map<string,ll>tmp;
for(int i=;i<=n;i++){
if(mp[a[i].str]==Max){
tmp[a[i].str]=;
}
}
int idmin=0x3f3f3f3f;
for(int i=;i<=n;i++){
if(tmp[a[i].str]==){
if(idmin>a[i].id&&a[i].num>=Max){
idmin=a[i].id;
ans=a[i].str;
}
}
}
cout<<ans<<endl;
//system("pause"); }
B
DP
能让末尾有0的情况是由2的倍数和5的倍数相乘,所以只要预处理出每个数中因子为2的个数和因子为5的个数,取最小值DP即可
#include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
typedef long long ll; int n;
int dp[][][];///dp[i][j][0] 表示2的数量,dp[i][j][1] 表示5的数量
int pre[][][]; void print(int i,int j,int k,int flag){
if(i==&&j==);
else if(i==) print(i,j-,k,);
else if(j==) print(i-,j,k,);
else{
if(dp[i][j][k]==dp[i][j-][k]+pre[i][j][k])
print(i,j-,k,);
else
print(i-,j,k,);
}
if(flag==) return;
cout<<(flag?"D":"R");
} int main(){
#ifndef ONLINE_JUDGE
freopen("1.txt","r",stdin);
#endif
std::ios::sync_with_stdio(false);
cin>>n;
int num,tmp;
int x=-,y=-;
memset(dp,0x3f,sizeof(dp));
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
cin>>num;
if(!num){
pre[i][j][]++;
pre[i][j][]++;
x=i,y=j;
continue;
}
tmp=num;
while(tmp%==){
pre[i][j][]++;
tmp/=;
}
tmp=num;
while(tmp%==){
pre[i][j][]++;
tmp/=;
}
}
} for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
for(int k=;k<;k++){
if(i>){
dp[i][j][k]=min(dp[i][j][k],dp[i-][j][k]);
}
if(j>){
dp[i][j][k]=min(dp[i][j][k],dp[i][j-][k]);
}
if( i== && j== ){
dp[i][j][k]=;
}
dp[i][j][k]+=pre[i][j][k];
}
}
}
int ans=min(dp[n][n][],dp[n][n][]);
if(x!=-&&y!=-&&ans>=){
cout<<<<endl;
for(int i=;i<x;i++){
cout<<"D";
}
for(int i=;i<y;i++){
cout<<"R";
}
for(int i=x;i<n;i++){
cout<<"D";
}
for(int i=y;i<n;i++){
cout<<"R";
}
cout<<endl;
}
else{
cout<<ans<<endl;
if(dp[n][n][]>dp[n][n][]){
print(n,n,,);
}
else{
print(n,n,,);
}
cout<<endl;
}
return ;
}
C
几何题+模拟退火
题意: 找一个点对每个圆切线的角度一样,如果有多个,就找角度最大的点
思路:asin(L/r) 只要L/r一样,它们的角度一定一样,所以用模拟退火枚举就好,感觉和2018icpc南京站的题很像
#include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define sqr(x) ((x)*(x))
typedef long long ll; struct circle{
double x,y,r;
}c[]; double angle[]; double Check(double x,double y){
for(int i=;i<;i++){
angle[i]=sqrt(sqr(x-c[i].x)+sqr(y-c[i].y))/c[i].r;
}
double ans=;
for(int i=;i<;i++){
ans+=sqr(angle[i]-angle[(i+)%]);
}
return ans;
} int main(){
#ifndef ONLINE_JUDGE
freopen("1.txt","r",stdin);
#endif
for(int i=;i<;i++){
scanf("%lf %lf %lf",&c[i].x,&c[i].y,&c[i].r);
}
double ansx,ansy;
ansx=(c[].x+c[].x+c[].x)/;
ansy=(c[].y+c[].y+c[].y)/;
double step=1.0;
int flag;
double tmp;
while(step>1e-){
flag=;
tmp=Check(ansx,ansy);
if(tmp>Check(ansx+step,ansy)) ansx+=step,flag=;
else if(tmp>Check(ansx-step,ansy)) ansx-=step,flag=;
else if(tmp>Check(ansx,ansy+step)) ansy+=step,flag=;
else if(tmp>Check(ansx,ansy-step)) ansy-=step,flag=;
if(!flag) step*=0.8;
}
if(Check(ansx,ansy)<1e-) printf("%.6f %.6f\n",ansx,ansy); }
Codeforces Beta Round#2的更多相关文章
- Codeforces Beta Round #80 (Div. 2 Only)【ABCD】
Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...
- Codeforces Beta Round #62 题解【ABCD】
Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...
- Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...
- Codeforces Beta Round #13 C. Sequence (DP)
题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...
- Codeforces Beta Round #79 (Div. 2 Only)
Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...
- Codeforces Beta Round #77 (Div. 2 Only)
Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...
- Codeforces Beta Round #76 (Div. 2 Only)
Codeforces Beta Round #76 (Div. 2 Only) http://codeforces.com/contest/94 A #include<bits/stdc++.h ...
- Codeforces Beta Round #75 (Div. 2 Only)
Codeforces Beta Round #75 (Div. 2 Only) http://codeforces.com/contest/92 A #include<iostream> ...
- Codeforces Beta Round #74 (Div. 2 Only)
Codeforces Beta Round #74 (Div. 2 Only) http://codeforces.com/contest/90 A #include<iostream> ...
随机推荐
- 分布式一致性协议之:Gossip(八卦)算法
Gossip算法因为Cassandra而名声大噪,Gossip看似简单,但要真正弄清楚其本质远没看起来那么容易.为了寻求Gossip的本质,下面的内容主要参考Gossip的原始论文:<<E ...
- js代码的执行顺序及运算
代码执行顺序:从上往下,一行一行的执行(也叫一个模块一个模块的执行) 变量的提升(它不是变量的功能,而是浏览器的功能) js代码如何执行? js代码执行前,浏览器会给他一个全局的环境 叫window, ...
- Linux 期中架构 PHP
环境 PHP安装前准备 先将需要的软件包如下位置放置.另外需要有WWW用户 参照nginx 满足以上条件后执行安装脚本 PHP安装脚本: #!/bin/bash #install PHP #au ...
- eclipse如何调试jar包源码
转载至:http://blog.csdn.net/niclascage/article/details/47451967 引子 深入学习开源代码很多时候都需要去调试别人的jar包.当然如果你能拿别人的 ...
- js如何获取数字占的位数~
获取整数的长度可以用以下几种方法实现: 1.调用toString方法转为字符串后取长度 var num = 123; alert(num.toString().length); 2.隐式转字符串后取长 ...
- javascript继承之借用构造函数(二)
//简单的函数调用 function Father() { this.nums= [1,2]; } function Son() { Father.call(this);//调用超类型,完成son继承 ...
- hive-hbase-handler方式导入hive表数据到hbase表中
Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler.jar工具类 : hive-hbase-handler.jar在 ...
- 原型模式(ProtoType)
用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象. 原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节. .Net 在 system 命名空间中提供了I ...
- PyQt5系列教程(九)QInputDialog的使用
软硬件环境 Ubuntu 15.10 32bit Python 3.5.1 PyQt 5.5.1 前言 输入框是界面开发中非常常见的控件,本文就来看看PyQt5中QInputDialog的使用 实例 ...
- shell $*与$@的区别
[root@bgx shell]# cat tt.sh #! /bin/bash test() { echo "未加引号,二者相同" echo $* echo $@ echo &q ...