A:不管有没有负数 一顿操作之后肯定只有正数 又因为A=A-B 所以最大值是一直在减小的 所以一定有结果

B:..一开始以为求min操作数 WA了2发 直接求所有数的GCD如果所有数的GCD都不是1的话就无解 有解就无脑扫2次就好了

C:给你一个char正方形矩阵 要求a[i][j]四个正方形对称轴都一样 可以任意change  直接爆搜八分之一块就行了.

#include <bits/stdc++.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#define foror(i,a,b) for(i=a;i<b;i++)
#define foror2(i,a,b) for(i=a;i>b;i--)
#define EPS 1.0e-8
#define PI acos(-1.0)
#define INF 3000000000
#define MOD 1000000007
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
//using ll = long long;
//using ull= unsigned long long;
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
int cmp(int a,int b)
{
return a<b;
}
char s[][];
int visit[][];
int gcd1(int a, int b)
{ return a == ? b : gcd1(b % a, a); }
map<char,int> mp;
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int t;
cin >> t;
while(t--)
{
int anser=;
int n;
char ch;
cin >> n;
int mid=(n+)/;
for(int i=;i<=n;i++)
mem(visit[i],);
for(int i=;i<=n;i++)
{
scanf("%s",s[i]+);
}
/*for(int i=1;i<=n;i++)
{
printf("%s\n",s[i]+1);
}*/
int maxn=;
for(int i=;i<=(n+)/;i++)
for(int j=;j<=(n+)/;j++)
{
if(visit[i][j]==)
continue;
if(i==j&&i+j==n+)
continue;
if(i==j||i+j==n+||*i==n+||*j==n+)
{
int ans=;
mp.clear();
mp[s[i][j]]++;
mp[s[i][n+-j]]++;
mp[s[n+-i][j]]++;
mp[s[n+-i][n+-j]]++;
mp[s[j][i]]++;
mp[s[n+-j][i]]++;
mp[s[j][n+-i]]++;
mp[s[n+-j][n+-i]]++;
visit[i][j]=;
visit[i][n+-j]=;
visit[n+-i][j]=;
visit[n+-i][n+-j]=;
visit[j][i]=;
visit[n+-j][i]=;
visit[j][n+-i]=;
visit[n+-j][n+-i]=;
ans=max(ans,mp[s[i][j]]);
ans=max(ans,mp[s[i][n+-j]]);
ans=max(ans,mp[s[n+-i][j]]);
ans=max(ans,mp[s[n+-i][n+-j]]);
ans=max(ans,mp[s[j][i]]);
ans=max(ans,mp[s[n+-j][i]]);
ans=max(ans,mp[s[j][n+-i]]);
ans=max(ans,mp[s[n+-j][n+-i]]);
//cout <<i << ""<<j<<endl;
//cout<<4-ans/2<<endl;
anser+=-ans/;
}
else
{
int ans=;
mp.clear();
mp[s[i][j]]++;
mp[s[i][n+-j]]++;
mp[s[n+-i][j]]++;
mp[s[n+-i][n+-j]]++;
mp[s[j][i]]++;
mp[s[n+-j][i]]++;
mp[s[j][n+-i]]++;
mp[s[n+-j][n+-i]]++;
visit[i][j]=;
visit[i][n+-j]=;
visit[n+-i][j]=;
visit[n+-i][n+-j]=;
visit[j][i]=;
visit[n+-j][i]=;
visit[j][n+-i]=;
visit[n+-j][n+-i]=;
ans=max(ans,mp[s[i][j]]);
ans=max(ans,mp[s[i][n+-j]]);
ans=max(ans,mp[s[n+-i][j]]);
ans=max(ans,mp[s[n+-i][n+-j]]);
ans=max(ans,mp[s[j][i]]);
ans=max(ans,mp[s[n+-j][i]]);
ans=max(ans,mp[s[j][n+-i]]);
ans=max(ans,mp[s[n+-j][n+-i]]);
//cout <<i << ""<<j<<endl;
//cout <<8-ans<<endl;
anser+=-ans;
}
}
cout << anser<<endl;
}
return ;
}

D:画人脸

#include <bits/stdc++.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#define foror(i,a,b) for(i=a;i<b;i++)
#define foror2(i,a,b) for(i=a;i>b;i--)
#define EPS 1.0e-8
#define PI acos(-1.0)
#define INF 3000000000
#define MOD 1000000009
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
//using ll = long long;
//using ull= unsigned long long;
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
char ans[][][];
int len1[],len2[];
void init()
{
for(int i=;i<;i++)
for(int j=;j<;j++)
ans[][i][j]='*';
ans[][][]=ans[][][]=ans[][][]=' ';
ans[][][]=ans[][][]=ans[][][]=' ';
ans[][][]=ans[][][]=ans[][][]=' ';
ans[][][]=ans[][][]=ans[][][]=' ';
ans[][][]=ans[][][]=' ';
ans[][][]=ans[][][]=' ';
len1[]=,len2[]=;
for(int i=;i<=;i++)
len1[i]=len1[i-]*+;
for(int i=;i<=;i++)
len2[i]=len2[i-]*+;
}
void draw1(int x,int x1,int y1,int x2,int y2)//y2>y1 x2>x1
{
if(x1==x2)
{
for(int i=y1;i<=y2;i++)
{
ans[x][x1][i]='*';
}
}
else
{
for(int i=x1;i<=x2;i++)
ans[x][i][y1]='*';
}
}
void draw(int x,int len)
{
int jian0=len>>;
int jianer=len>>;
int jianyi=len>>;
draw1(x,,,,len-);
draw1(x,,,len-,);
draw1(x,,len-,len-,len-);
draw1(x,len-,,len-,len-);
//TS;
draw1(x,jianer,jianer,jianer+jianyi-,jianer);
draw1(x,jianer,jianer,jianer,jianer+jianyi-);
draw1(x,jianer+jianyi,jianer,jianer+jianyi,jianer+jianyi-);
draw1(x,jianer,jianer+jianyi-,jianer+jianyi,jianer+jianyi-);
//TS;
draw1(x,jianer,jianer+*jianyi-,jianer,jianer+*jianyi-);
draw1(x,jianer,jianer+*jianyi-,jianer+jianyi,jianer+*jianyi-);
draw1(x,jianer,jianer+*jianyi-,jianer+jianyi,jianer+*jianyi-);
draw1(x,jianer+jianyi,jianer+*jianyi-,jianer+jianyi,jianer+*jianyi-);
//TS;
for(int i=len-;i>=jian0;i--)
for(int j=jianyi+jian0-;j>=jianyi;j--)
{
ans[x][i][j]=ans[x-][len--i][jianyi+jian0--j];
}
//cout << x<<endl;
}
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int n;
init();
//TS;
for(int x=;x<=;x++)
{
draw(x,<<x);
}
while(scanf("%d",&n)==)
{
if(n<)
break;
int num=log2(n);
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
printf("%c",ans[num][i][j]);
}
cout <<endl;
}
cout <<endl;
}
return ;
}

E:先离散化 离散化 +模拟双端队列

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct Node{
int c,p;
bool operator<(const Node& rhs)const{
if(c!=rhs.c) return c<rhs.c;
return p<rhs.p;
}
}s[];
int N,K;
int cal(int st,int ed){
int k=,sum=,ret=;
for(int p=st,q=st;q<=ed;){
if(k<=K){
sum++;
ret=max(ret,sum);
k+=s[q+].p-s[q].p-;
q++;
}else{
sum--;
k-=s[p+].p-s[p].p-;
p++;
}
}
return ret;
}
int main()
{
// freopen("data.in","r",stdin);
while(scanf("%d%d",&N,&K)==){
int i,j;
for(i=;i<N;s[i].p=i++)
scanf("%d",&s[i].c);
sort(s,s+N);
int ans=;
for(i=;i<N;i=j+){
int c=s[i].c;
j=i;
while(j+<N && s[j+].c==c) j++;
ans=max(ans,cal(i,j));
}
printf("%d\n",ans);
}
return ;
}

F:递推DP

1)用dp[i][j]表示源串第i次操作后,与目标串不同的位置有几个。

(2)对于dp[i][j],有j个位置与目标串不同,所以可以将j个位置中的t个位置变为与目标串相同,把其余n-j个位置中的m-t个位置变为与目标串不同,转移方程就是dp[i+1][j-t+m-t]+=dp[i][j]*C(t,j)*C(m-t,n-j)

(3)如果j+m>n,那么t就无法从0开始枚举了,所以此时t从(m-(n-j))开始(m次操作中有n-j次操作落在n-j个相同位置的里面,还有m-(n-j)次操作落在j个不同位置的里面)。

(4)初始条件就是用cnt统计源串和目标串有多少个位置不一样,dp[0][cnt]=1,通过dp把路径都找出来,那么答案就是dp[k][0]。

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
const LL MOD=;
LL dp[][],c[][];
char s[],d[]; void _init(){
c[][]=;
for(int i=;i<=;i++){
c[i][]=;
for(int j=;j<=i;j++){
c[i][j]=(c[i-][j-]+c[i-][j])%MOD;
}
}
} int main()
{
int n,k,m, i,j,t,x;
_init();
while(scanf("%d%d%d",&n,&k,&m)==){
scanf("%s",s);
scanf("%s",d);
x=;
for(i=;i<n;i++)
if(s[i]!=d[i])x++;
for(i=;i<=k;i++)
for(j=;j<=n;j++)
dp[i][j]=;
dp[][x]=;
for(i=;i<k;i++)//ith operation
for(j=;j<=n;j++){//j different
if(dp[i][j]==)continue;
for(t=max(,m-(n-j));t<=j&&t<=m;t++)//j+m should no biger than n or at least (m-(n-j)) should be change
dp[i+][j-t+m-t]=(dp[i+][j-t+m-t]+dp[i][j]*c[j][t]%MOD*c[n-j][m-t]%MOD)%MOD;
}
LL ans=dp[k][];
printf("%lld\n",ans);
}
return ;
}

G:给你一个完全/非完全二叉树求最小的宽度  首先肯定把根节点的两个叶子放在同一侧是最优的 然后让较宽的那一枝在最里面是最优的 以一个节点为例:如果只有一个枝就无限地延伸 ans[x]=ans[a[x][0]] 如果有两个枝的话 相同就宽度+1 不同就取最大的

#include <bits/stdc++.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#define foror(i,a,b) for(i=a;i<b;i++)
#define foror2(i,a,b) for(i=a;i>b;i--)
#define EPS 1.0e-8
#define PI acos(-1.0)
#define INF 3000000000
#define MOD 1000000009
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
//using ll = long long;
//using ull= unsigned long long;
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
vector<vector<int> >a();
int ans[];
void doit(int x)
{
if(a[x].size()==)
{
ans[x]=;
}
else if(a[x].size()==)
{
doit(a[x][]);
ans[x]=ans[a[x][]];
}
else if(a[x].size()==)
{
doit(a[x][]);
doit(a[x][]);
if(ans[a[x][]]==ans[a[x][]])
ans[x]=ans[a[x][]]+;
else
ans[x]=max(ans[a[x][]],ans[a[x][]]);
}
}
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int n;
while(scanf("%d",&n)==)
{
mem(ans,);
for(int i=;i<=n;i++)
a[i].clear();
for(int i=;i<=n-;i++)
{
int x;
scanf("%d",&x);
a[x].push_back(i+);
}
doit();
/*for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
cout << endl;*/
cout << ans[]<<endl;
}
return ;
}

H:几何

题目大意:给你一个三角形的内切圆半径跟外接圆半径,求解出符合条件的三角形,输出三角形的三条边的长度,如果没有符合条件的三角形,输出“NO Solution!”。

解题思路:这个题是SP,既是因为情况不唯一,而且还有精度的误差。

  首先能够想到的就是NO Solution!的情况,即当内切圆半径等于1/2外接圆半径时,此时内切圆最大,而三角形为等边三角形,如图。

  其次要解决的就是怎么构造三角形的问题,因为解不唯一,所以只要列举出一种解就OK,于是就很容易的想到构造等腰三角形,在最大与最小之间二分等腰三角形的底边长度,解三角形得到答案,如图。

#define sqr(x) (x)*(x)

int main()
{
double r, R;
while(~scanf("%lf%lf", &r, &R)){
if(R < *r){
printf("NO Solution!\n");
continue;
}
double left = , right = sqrt(3.0)*R;
while(right-left > eps){
double mid = (left+right)/2.0;
double t = sqrt(sqr(sqrt(sqr(R)-sqr(mid/2.0))+R)+sqr(mid/2.0));
//printf("%lf\n", t);
if(sqr(sqrt(sqr(r)+sqr(t-mid/2.0))+r) + sqr(mid/2.0) - sqr(t) < eps){
right = mid;
}
else {
left = mid;
}
} double p = sqrt(sqr(sqrt(sqr(R)-sqr(left/2.0))+R)+sqr(left/2.0));
printf("%.16lf %.16lf %.16lf\n", p, p, left);
} return ;
} /*Sample test*/
/* */ ZOJ

Summer training #2的更多相关文章

  1. hdu 4946 2014 Multi-University Training Contest 8

    Area of Mushroom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. 2016 Multi-University Training Contests

    2016 Multi-University Training Contest 1 2016 Multi-University Training Contest 2 2016 Multi-Univers ...

  3. 2016 Multi-University Training Contest 2 D. Differencia

    Differencia Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  4. 2016 Multi-University Training Contest 1 G. Rigid Frameworks

    Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  5. ACM: Gym 101047K Training with Phuket's larvae - 思维题

     Gym 101047K Training with Phuket's larvae Time Limit:2000MS     Memory Limit:65536KB     64bit IO F ...

  6. The Solution of UESTC 2016 Summer Training #1 Div.2 Problem C

    Link http://acm.hust.edu.cn/vjudge/contest/121539#problem/C Description standard input/output After ...

  7. 2012 Multi-University Training Contest 9 / hdu4389

    2012 Multi-University Training Contest 9 / hdu4389 打巨表,实为数位dp 还不太懂 先这样放着.. 对于打表,当然我们不能直接打,这里有技巧.我们可以 ...

  8. 2014 Multi-University Training Contest 9#11

    2014 Multi-University Training Contest 9#11 Killing MonstersTime Limit: 2000/1000 MS (Java/Others)   ...

  9. 2014 Multi-University Training Contest 9#6

    2014 Multi-University Training Contest 9#6 Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Oth ...

  10. 2016 Multi-University Training Contest 1

    8/11 2016 Multi-University Training Contest 1 官方题解 老年选手历险记 最小生成树+线性期望 A Abandoned country(BH) 题意: 1. ...

随机推荐

  1. openstack——Rabbitmq集群部署

    一.前期准备 1.条件:准备3台Linux系统虚拟机,保持系统版本一致,确保配置好yum源,及网络源     2.3台虚拟机做静态解析 [root@yun1 ~]# cat /etc/hosts 12 ...

  2. 安装vsftpd

    通用安装和配置 1.下载安装包并安装 wget http://mirror.centos.org/centos/7/os/x86_64/Packages/vsftpd-3.0.2-25.el7.x86 ...

  3. 让样式文件,或js文件的相对路径,变成成绝对路径

    添加两行代码即可 <% String path = request.getContextPath(); String basePath = request.getScheme() + " ...

  4. eclipse 如何从Gitee.com克隆工程到本地,并运行

    1.再项目资源管理器里选择导入,导入 2.在导入向导中选择Git,选择来自Git的项目 3.选克隆URL 4.输入URL 和用户密码,点击下一步 4.下一步 5.选择保存路径 6.选择下一步,自动导入 ...

  5. postman 请求接口 Could not get any response

    前提: 今天用postman请求接口的时候,能请求到接口,但是打断点后发现方法里面要抛出异常就出现错误: 错误原因: 返回的 http 的 code不是3位的,如下我写成了四位 4002: <? ...

  6. Linux:shift 命令可以将参数依次向左移动一个位置

    在脚本中,命令行参数可以依据其在命令行中的位置来访问.第一个参数是 $1 ,第二个参数 是 $2 ,以此类推. 下面的语句可以显示出前3个命令行参数: echo $1 $2 $3 更为常见的处理方式是 ...

  7. python+requests 请求响应文本出错返回“登录超时”

    Python+requests请求响应:"msg":"登录过时" 1.出错原代码: import requests import json#页面按条件搜索返回相 ...

  8. 【LOJ】#3093. 「BJOI2019」光线

    LOJ#3093. 「BJOI2019」光线 从下到上把两面镜子合成一个 新的镜子是\((\frac{a_{i}a_{i + 1}}{1 - b_{i}b_{i + 1}},b_{i} + \frac ...

  9. django初步了解2

    目录 django初步了解2 表的字段增删改查 数据的增删改查 反向解析和分组 路由分发 名称空间 伪静态 虚拟环境 django初步了解2 表的字段增删改查 新增的字段 1.直接提供默认值 defa ...

  10. react 深度 循环嵌套对象渲染问题 map

    查了一些资料貌似react的循环渲染对象只有map,但map只支持数组对象. 接到后台数据如下 { "list": { "A": [{ "image& ...