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. sql回显注入(满满的干货)

    三种注入poc where user_id = 1 or 1=1 where user_id = '1' or '1'='1' where user_id =" 1 "or &qu ...

  2. JS中常用的语法

    在做前端中,JS的语法尤为重要..没有它,就没有你的未来吧.. 下面将一些常用的JS语法给大家罗列出来.. 也给自己备份一下.. 以备不时之需.. 1.输出语句:document.write(&quo ...

  3. day38 各种队列、Event事件、协程、猴子补丁

    1.各种队列 我们已经学习了队列这种存取值的方法,我们以前使用的队列是可以进行进程间通信的(IPC),但是今天学习的这两种队列是不能进行进程间通信的,只能进行线程间的通信 这两种队列分别是先进后出式队 ...

  4. PAT(Advanced Level)1055.The World's Richest

    Forbes magazine publishes every year its list of billionaires based on the annual ranking of the wor ...

  5. vim 显示行号 查找的命令简单总结

    1. linux vim 进行查找的方法 在command 模式下面 输入 /what-you-search 就可以搜索 注意  n 是向下查找 N 是向上查找 不想搜索了 输入 :set nol 就 ...

  6. Java回调实现异步 (转)

    出处: Java回调实现异步 在正常的业务中使用同步线程,如果服务器每处理一个请求,就创建一个线程的话,会对服务器的资源造成浪费.因为这些线程可能会浪费时间在等待网络传输,等待数据库连接等其他事情上, ...

  7. asp.net练习②——Paginaton无刷新分页

    aspx代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server" ...

  8. zabbix-自定义告警(二)

    实现自定义监控 文章引用:https://www.cnblogs.com/clsn/p/7885990.html#auto_id_28 一.实现自定义监控 说明zabbix自带模板Template O ...

  9. Neo4j WARNING: Max 1024 open files allowed, minimum of 40 000 recommended. See the Neo4j manual

    you can add a line in /etc/default/neo4j: NEO4J_ULIMIT_NOFILE=60000 to set the ulimit setting (60000 ...

  10. jsp其实是一个java类

    我们打开tomcat的D:\Program_Files\apache-tomcat-8.0.32\work\Catalina\localhost\venus\org\apache\jsp, 当我们访问 ...