链接:https://pan.baidu.com/s/1kVQc9d9

Problem A:

#include <cstdio>
#include <algorithm>
#include <vector>
#include <cmath> using namespace std; const int maxn = 222; struct Point
{
long long x, y;
Point(long long x = 0, long long y = 0) : x(x), y(y) { }
void read()
{
scanf("%lld %lld", &x, &y);
}
}; typedef Point Vector; Vector operator - (const Point &A, const Point &B)
{
return Vector(A.x - B.x, A.y - B.y);
} long long Cross(const Vector &A, const Vector &B)
{
return A.x * B.y - A.y * B.x;
} long long Dot(const Vector &A, const Vector &B)
{
return A.x * B.x + A.y * B.y;
} double inter(Point p, Vector v, Point q, Vector w)
{
Vector u = p - q;
return 1.0 * Cross(w, u) / Cross(v, w);
} bool on(Point p, Point a, Point b)
{
return Cross(p - a, p - b) == 0;
} int dcmp(long long x)
{
if (x == 0)
return 0;
return x > 0 ? 1 : -1;
} int n;
Point p[maxn];
double ans = 0.0; void solve(Point A, Point B)
{
vector<double> lst;
for (int i = 0; i < n; ++i)
{
if (dcmp(Cross(p[i] - A, B - A)) * dcmp(Cross(p[i + 1] - A, B - A)) >= 0)
continue;
lst.push_back(inter(A, B - A, p[i], p[i + 1] - p[i]));
}
for (int i = 0; i < n; ++i)
{
if (!on(p[i], A, B))
continue;
Point L = p[(i + n - 1) % n];
Point N = p[(i + 1) % n];
Point P = p[i];
long long dir = Cross(B - A, L - A);
double pos = 1.0 * Dot(P - A, B - A) / Dot(B - A, B - A);
if (dir == 0)
{
if (Dot(B - A, P - L) > 0)
{
if (Cross(B - A, N - A) > 0)
lst.push_back(pos);
}
else
{
if (Cross(B - A, N - A) < 0)
lst.push_back(pos);
}
}
else if (dir > 0)
{
if (Cross(B - A, N - A) < 0)
lst.push_back(pos);
else if (Cross(B - A, N - A) == 0 && Dot(B - A, N - P) > 0)
lst.push_back(pos);
}
else
{
if (Cross(B - A, N - A) > 0)
lst.push_back(pos);
else if (Cross(B - A, N - A) == 0 && Dot(B - A, N - P) < 0)
lst.push_back(pos);
}
}
sort(lst.begin(), lst.end());
double len = sqrt(Dot(B - A, B - A));
for (int i = 0; i < (int)lst.size(); i += 2)
ans = max(ans, (lst[i + 1] - lst[i]) * len);
} int main()
{
scanf("%d", &n);
for (int i = 0; i < n; ++i)
p[i].read();
p[n] = p[0];
for (int i = 0; i < n; ++i)
for (int j = i + 1; j < n; ++j)
solve(p[i], p[j]);
printf("%.10f\n", ans);
return 0;
}

Problem C:

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 305, M = 100005;

const ll inf = 1ll << 60;

int head[N];

struct Edge {
int nxt, to, cow;
ll cost;
Edge() {}
Edge(int nxt, int to, int cow, ll cost) : nxt(nxt), to(to), cow(cow), cost(cost) {}
} ed[M]; int ecnt, mx_flow; ll mi_cost; void init() {
mx_flow = mi_cost = ecnt = 0;
memset(head, -1, sizeof(head));
} void addE(int u, int v, int cow, ll cost) {
ed[ecnt] = Edge(head[u], v, cow, cost);
head[u] = ecnt ++;
ed[ecnt] = Edge(head[v], u, 0, -cost);
head[v] = ecnt ++;
} queue <int> Q; ll dis[N]; int pre[N], inq[N], tot; bool spfa(int S, int T) {
for (int i = 0; i < tot; ++ i)
dis[i] = inf;
dis[S] = 0;
Q.push(S);
while (!Q.empty()) {
int u = Q.front(); Q.pop();
inq[u] = 0;
for (int e = head[u]; ~e; e = ed[e].nxt) {
if (!ed[e].cow)
continue;
int v = ed[e].to;
if (dis[v] > dis[u] + ed[e].cost) {
dis[v] = dis[u] + ed[e].cost;
pre[v] = e;
if (!inq[v]) {
inq[v] = 1;
Q.push(v);
}
}
}
}
return dis[T] < 0;
} void aug(int S, int T) {
int flow = 1 << 30;
for (int u = T; u != S; u = ed[pre[u] ^ 1].to)
flow = min(flow, ed[pre[u]].cow);
for (int u = T; u != S; u = ed[pre[u] ^ 1].to) {
ed[pre[u]].cow -= flow;
ed[pre[u] ^ 1].cow += flow;
mi_cost += flow * ed[pre[u]].cost;
}
mx_flow += flow;
} int A[105][105]; int mxr[105], mxc[105]; int idr[105], idc[105]; int main() {
init();
int n, m;
scanf("%d%d", &n, &m);
long long sum = 0;
for (int i = 0; i < n; ++ i)
for (int j = 0; j < m; ++ j)
scanf("%d", A[i] + j), sum += A[i][j];
for (int i = 0; i < n; ++ i) {
mxr[i] = - (1 << 30);
for (int j = 0; j < m; ++ j)
mxr[i] = max(mxr[i], A[i][j]);
}
for (int j = 0; j < m; ++ j) {
mxc[j] = - (1 << 30);
for (int i = 0; i < n; ++ i)
mxc[j] = max(mxc[j], A[i][j]);
}
tot = 0;
for (int i = 0; i <= n; ++ i)
idr[i] = tot ++;
for (int i = 0; i <= m; ++ i)
idc[i] = tot ++;
int src = tot ++, des = tot ++;
int use = 0;
for (int i = 0; i < n; ++ i)
if (mxr[i])
addE(src, idr[i], 1, - (1 << 30)), ++ use;
for (int i = 0; i < m; ++ i)
if (mxc[i])
addE(idc[i], des, 1, - (1 << 30)), ++ use;
addE(src, idr[n], 1 << 30, 0);
addE(idc[m], des, 1 << 30, 0);
long long ans = 0;
for (int i = 0; i < n; ++ i) {
for (int j = 0; j < m; ++ j) {
if (A[i][j] == 0)
continue;
++ ans;
if (mxr[i] < mxc[j]) {
addE(idr[i], idc[m], 1, mxr[i] - 1);
} else if(mxr[i] > mxc[j]) {
addE(idr[n], idc[j], 1, mxc[j] - 1);
} else {
addE(idr[i], idc[j], 1, mxr[i] - 1);
addE(idr[i], idc[m], 1, mxr[i] - 1);
addE(idr[n], idc[j], 1, mxr[i] - 1);
}
}
}
while(spfa(src, des))
aug(src, des);
mi_cost += (1ll << 30) * use;
ans += mi_cost;
cout << sum - ans << endl;
return 0;
}

Problem E:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int n;
double t,d[maxn],s[maxn];
double check(double x){
double res = 0;
for(int i=0;i<n;i++){
if(s[i]+x<=0){
return 10000000.0;
}
res += d[i]/(s[i]+x);
}
return res;
}
int main(){
cin>>n>>t;
for(int i=0;i<n;i++)
cin>>d[i]>>s[i];
double l=-1e9,r=1e9;
for(int cas=0;cas<=100;cas++){
double mid = (l+r)/2.0;
if(check(mid)>t)l=mid;
else r=mid;
}
printf("%.12f\n",l);
}

Problem F:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 260;
long long d[maxn];
long long dp[maxn][maxn];
long long cal[maxn][maxn];
int n,m;
int a,b;
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d%d",&a,&b);
a++;
d[a]+=b;
}
for(int i=0;i<maxn;i++){
for(int j=2;j<maxn;j++){
dp[i][j]=10000000000000000LL;
}
}
for(int i=1;i<=256;i++){
for(int j=i+1;j<=256;j++){
for(int i2=i+1;i2<j;i2++){
cal[i][j]+=1ll*min(i2-i,j-i2)*min(i2-i,j-i2)*d[i2];
}
}
}
for(int i=1;i<=256;i++){
for(int j=1;j<i;j++){
dp[i][1]+=1ll*(i-j)*(i-j)*d[j];
}
}
for(int i=1;i<=256;i++){
for(int j=1;j<=i;j++){
for(int i2=2;i2<=m;i2++){
dp[i][i2]=min(dp[i][i2],dp[j][i2-1]+cal[j][i]);
}
}
}
for(int i=1;i<=256;i++){
for(int j=i+1;j<=256;j++){
dp[i][m]+=1ll*(j-i)*(j-i)*d[j];
}
}
long long Res = 10000000000000000LL;
for(int i=1;i<=256;i++){
Res = min(Res,dp[i][m]);
}
cout<<Res<<endl;
}

Problem I:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 30;
int mp[maxn][maxn]; int main(){
int n,m;
scanf("%d%d",&n,&m);
string a,b;
for(int i=0;i<n;i++){
cin>>a>>b;
mp[a[0]-'a'][b[0]-'a']=1;
}
for(int k=0;k<26;k++){
mp[k][k]=1;
for(int i=0;i<26;i++){
for(int j=0;j<26;j++){
if(mp[i][k]&&mp[k][j])
mp[i][j]=1;
}
}
}
string s1,s2;
for(int i=1;i<=m;i++){
cin>>s1>>s2;
if(s1.size()!=s2.size()){
cout<<"no"<<endl;
continue;
}
int flag = 1;
for(int j=0;j<s1.size();j++){
if(mp[s1[j]-'a'][s2[j]-'a']==0)
flag = 0;
}
if(flag == 0)
cout<<"no"<<endl;
else
cout<<"yes"<<endl;
}
}

World final 2017 题解的更多相关文章

  1. 2017算法期末复习练习赛-G Beihang Couple Pairing Comunity 2017 题解(网络流)

    理解不够透彻.好题不可浪费,写题解以增进理解.会陆续补充题目.(咕咕咕) G Beihang Couple Pairing Comunity 2017 题目链接 Beihang Couple Pair ...

  2. April Fools Contest 2017 题解&源码(A,数学 B,数学 C,数学 D,字符串 E,数字逻辑 F,排序,卡时间,G,数学)

    A. Numbers Joke time limit per test:2 seconds memory limit per test:64 megabytes input:standard inpu ...

  3. April Fools Contest 2017 题解

    趁着上课无聊,来补一补-- A. Numbers Joke 直接oeis就好了:http://oeis.org/search?q=numbers+joke&language=english&a ...

  4. 2017 Bangladesh National High School Programming Contest ( National Round, Senior Group ), NHSPC 2017 题解

    [题目链接] A. Charm Is Not Always Enough 模拟一下就可以了. #include <bits/stdc++.h> using namespace std; i ...

  5. Mujin Programming Challenge 2017题解

    传送门 \(A\) 似乎并不难啊然而还是没想出来-- 首先我们发现对于一个数\(k\),它能第一个走到当且仅当对于每一个\(i<k\)满足\(x_i\geq 2i-1\),这样我们就可以把所有的 ...

  6. Codeforces Round #543 (Div. 1, based on Technocup 2019 Final Round) 题解

    题面戳这里 A. Diana and Liana 首先如果s>ks>ks>k一定无解,特判一下.那么我们考虑找恰好满足满足题目中的要求的区间[l,r][l,r][l,r],那么需要要 ...

  7. 【codeforces】【比赛题解】#931 CF Round #468 (Div. 2)

    因为太迟了,所以没去打. 后面打了Virtual Contest,没想到拿了个rank 3,如果E题更快还能再高,也是没什么想法. [A]Friends Meeting 题意: 在数轴上有两个整点\( ...

  8. Apple Catching(dp)

    Apple Catching Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9831   Accepted: 4779 De ...

  9. CODE FESTIVAL 2017 Final题解

    传送门 \(A\) 咕咕 const int N=55; const char to[]={"AKIHABARA"}; char s[N];int n; int main(){ s ...

随机推荐

  1. 配置samba文件服务器

    1.打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入当前登录用户的管理员密码"--> ...

  2. iframe传递参数问题

    在页面中嵌入了iframe,如果需要传递参数到iframe中 1.通过将参数嵌入到url中,在iframe中使用${param.xxx}可以获取 2.通过将参数存入到session中,在iframe中 ...

  3. 转载:Linux内核参数的优化(1.3.4)《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19615.html 由于默认的Linux内核参数考虑的是最通用的场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改 ...

  4. shell expect权威指南和实战

    一.概述 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能.而expec ...

  5. R-FCN:安装训练自己的数据

    参考:http://blog.csdn.net/sinat_30071459/article/details/53202977 如果用的是cudnnv5,可能会遇到问题,下载最新的caffe,替换这部 ...

  6. 《转》利用cxf实现webservice

    首先下载cxf包,目前最新的版本是apache-cxf-2.1.,下栽地址http://cxf.apache.org/download.html. 1. 首先新建一个web工程CxfService,倒 ...

  7. node.js认识及学习资料

    2011年阿里就已经开始在生产环境中使用nodejs. 阿里的技术栈中,Java是最核心的,Nodejs扮演怎样的一个角色? 1. 基础设施大部分采用Java实现,变化较少,有事务要求的Busines ...

  8. 【AtCoder】Tenka1 Programmer Contest

    C - 4/N 列出个方程枚举解一下 #include <bits/stdc++.h> #define fi first #define se second #define pii pai ...

  9. 'utf-8' codec can't decode byte 0xc8 in position 0

    今天学习python中使用jieba库,遇到了错误:“UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: i ...

  10. 通过pyqt5实现俄罗斯方块游戏例子

    # *_* coding:utf-8 *_* # 开发团队:中国软件开发团队# 开发人员:Administrator# 开发时间:2019/3/17 2:13# 文件名称:RussiaBoard# 开 ...