Summer training round2 #1
A:水
B:求两个三角形之间的位置关系:相交 相离 内含
①用三个点是否在三角形内外判断 计算MA*MB、MB*MC、MC*MA的大小 若这三个值同号,那么在三角形的内部,异号在外部
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define INF 2139062143
#define inf -2139062144
#define ll long long
using namespace std;
int x[],y[];
int dian(int a,int i,int j) {
return (x[a] - x[i])*(x[a]-x[j]) + (y[a] - y[i]) * (y[a] - y[j]);
}
bool pan(int a,int b,int c) {
int zheng = ,fu = ;
if(a>) zheng++;
if(b>) zheng++;
if(c>) zheng++;
fu = - zheng;
if(fu == || fu == ) return true;
else return false;
}
int main() {
int t;
int i;
scanf("%d",&t);
bool xx[];
while(t--) {
for(i=; i<; i++) {
scanf("%d%d",&x[i],&y[i]);
}
for(i=; i<; i++) {
xx[i] = pan(dian(i,,),dian(i,,),dian(i,,));
// printf("fuck:%d %d %d\n",dian(i,3,4),dian(i,4,5),dian(i,3,5));
}
for(i=; i<; i++) {
xx[i] = pan(dian(i,,),dian(i,,),dian(i,,));
// printf("fuck:%d %d %d\n",dian(i,0,1),dian(i,0,2),dian(i,1,2));
}
// for(i=0; i<6; i++) printf("%d ",xx[i]);
if(xx[] == true && xx[] == true && xx[] == true) {
printf("contain\n");
continue;
}
if(xx[] == true && xx[] == true && xx[] == true) {
printf("contain\n");
continue;
}
if(xx[] == false && xx[] == false && xx[] == false && xx[] == false && xx[] == false && xx[] == false) {
printf("disjoint\n");
continue;
}
printf("intersect\n");
}
return ;
}
D:KMP加上特殊情况判断
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define INF 2139062143
#define inf -2139062144
#define MOD 1000000007
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define pai pair<int,int>
using namespace std;
string ori,pat;
int n,nxt[],ans=;
int GetNext()
{
nxt[]=nxt[]=;
for(int i=;i<pat.size();i++)
{
int j=nxt[i];
while(j&&pat[i]!=pat[j])j=nxt[j];
nxt[i+]=((pat[i]==pat[j])?j+:);
}
}
int Kmp()
{
memset(nxt,,sizeof(nxt));
GetNext();
int j=;
for(int i=;i<ori.size();i++)
{
while(j&&ori[i]!=pat[j])j=nxt[j];
if(ori[i]==pat[j])j++;
if(j==pat.size())ans++;
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
cin>>ori>>pat;
if(pat.size()>ori.size())
{
cout<<"Bob"<<endl;
}else
{
int flag1=,flag2=;
ans=;Kmp();
if(ans)flag1=;
reverse(pat.begin(),pat.end());
string t="";
int j;
for(j=;j<pat.size();j++)
{
if(pat[j]!='')break;
}
for(;j<pat.size();j++)
{
t+=pat[j];
}
pat=t;
ans=;Kmp();
if(ans)flag2=;
if(flag1||flag2)cout<<"Alice"<<endl;else cout<<"Bob"<<endl;
}
}
return ;
}
G:猜公式(JAVA)
import java.math.BigInteger;
import java.util.Scanner; public class Main { public static void main(String[] args) {
int t;
Scanner input = new Scanner(System.in);
t = input.nextInt();
while (t-- > ) {
// BigInteger n = input.nextBigInteger();
int n = input.nextInt();
BigInteger flag = BigInteger.valueOf();
for(int i = ;i<=n;i++){
flag = flag.multiply(BigInteger.valueOf(i));
}
BigInteger ans = BigInteger.valueOf();
for(int i = ;i<=n;i++){
ans = ans.add(flag.divide(BigInteger.valueOf(i)));
}
System.out.println(ans + ".0");
}
}
}
F:DFS序加树状数组 子节点增加的值为x+dep[v]∗k−dep[s]∗k,那么维护两个值x+dep[v]*k与-k,用两个树状数组维护这两个值,做到区间修改,单点查询
I:哈希加暴力 或者直接用strcmp函数判
K:错排加逆元加快速幂
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define INF 2139062143
#define inf -2139062144
#define MOD 1000000007
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define pai pair<int,int>
//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;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pai1;
const double EPS=1e-;
const double PI=acos(-);
ll mod=;
const int maxn=;
ll cuo[maxn];
ll ni[maxn];
ll jie[maxn];
ll quick_pow(ll a,ll n)
{
ll result=;
while(n>)
{
if(n&)
result=(result*a)%mod;
a=(a*a)%mod;
n/=;
}
return result;
}
void init()
{
cuo[]=;
cuo[]=;
for(int i=;i<=;i++)
cuo[i]=(i-)*(cuo[i-]+cuo[i-])%mod;
ni[]=jie[]=;
jie[]=ni[]=ni[]=jie[]=;
for(int i=;i<=;i++)
{
jie[i]=i*jie[i-]%mod;
ni[i]=quick_pow(jie[i],mod-);
}
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("out.txt","w",stdout);
init();
int t;
cin>>t ;
ll anser=;
while(t--)
{
anser=;
int n,k;
cin >> n >> k;
int now=n-k;
if(now==||now==)
{
if(now==)
{
printf("1\n");
continue;
}
else
{
printf("0\n");
continue;
}
}
anser++;
ll cur=;
for(int i=now;i>=;i--)
{
anser+=(((jie[n]*ni[i]%mod)*ni[n-i]%mod)*cuo[i])%mod;
}
cout<<anser%mod<<endl;
}
return ;
}
L:爆搜
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define INF 2139062143
#define inf -2139062144
#define ll long long
using namespace std;
int qi[][];
bool flag;
int ini;
bool pan(int des) {
if(qi[][] == qi[][] && qi[][] == qi[][] && qi[][] == des) return true;
if(qi[][] == qi[][] && qi[][] == qi[][] && qi[][] == des) return true;
if(qi[][] == qi[][] && qi[][] == qi[][] && qi[][] == des) return true; if(qi[][] == qi[][] && qi[][] == qi[][] && qi[][] == des) return true;
if(qi[][] == qi[][] && qi[][] == qi[][] && qi[][] == des) return true;
if(qi[][] == qi[][] && qi[][] == qi[][] && qi[][] == des) return true; if(qi[][] == qi[][] && qi[][] == qi[][] && qi[][] == des) return true;
if(qi[][] == qi[][] && qi[][] == qi[][] && qi[][] == des) return true;
return false;
}
bool dfs(int now,int step) {
int i,j;
if(step == ) {
if(pan(ini)) flag = true;
for(i=; i<; i++) {
for(j=; j<; j++) {
// printf("fuck:%d %d %d\n",i,j,qi[i][j]);
if(qi[i][j] == ) {
qi[i][j] = ini;
if(pan(ini) == true) flag = true;
if(dfs(now * (-),) == true) flag = true;
qi[i][j] = ;
}
}
}
} else {
if(step == ) {
bool temp = true;
for(i=; i<; i++) {
for(j=; j<; j++) {
if(qi[i][j] == ) {
qi[i][j] = (ini*-);
if(pan(ini*-)) temp = false;
if(dfs(ini,) == false) temp = false;
qi[i][j] = ;
}
}
}
return temp;
} else {
if(step == ) {
bool tt = false;
for(i=; i<; i++) {
for(j=; j<; j++) {
if(qi[i][j] == ) {
qi[i][j] = ini;
if(pan(ini)) tt = true;
qi[i][j] = ;
}
}
}
return tt;
}
}
}
}
int main() {
int t;
scanf("%d",&t);
while(t--) {
int i,j;
getchar();
for(i=; i<; i++) {
for(j=; j<; j++) {
char x[];
scanf("%s",x);
char te = x[];
if(te == '.') qi[i][j] = ;
if(te == 'o') qi[i][j] = ;
if(te == 'x') qi[i][j] = -;
}
} char x[];
scanf("%s",x);
char te = x[];
int now;
if(te == 'o') now = ;
if(te == 'x') now = -;
ini = now;
flag = false; if(pan(ini * -) == true) {
printf("Cannot win!\n");
} else {
// for(i=0; i<3; i++) {
// for(j=0; j<3; j++)
// printf("%d ",qi[i][j]);
// printf("\n");
// }
dfs(now,);
if(flag) printf("Kim win!\n");
else printf("Cannot win!\n");
}
}
return ;
}
Summer training round2 #1的更多相关文章
- Summer training round2 #3
A!: GTY系列题 B!:莫队加分块 GTY系列题 C!:线段树模拟拓扑排序(把普通的拓扑排序的栈操作改成线段树区间减一,查询区间最右侧的0的位置即可.注意一 ...
- Summer training round2 #8(Training26)
A:贪心DFS 先从最远的搜起 如果一个点的value>=2 就ans++ D:并查集 E:大模拟 F:快速幂 #include <bits/stdc++.h> using name ...
- Summer training round2 #9(Training28)
A:签到题 C:模拟搜索题 #include <bits/stdc++.h> #include <cstring> #include <iostream> #inc ...
- Summer training round2 #10(Training 30)
A:签到题 B!:搜索+DP #include<bits/stdc++.h> #define mp make_pair #define pi pair<int,int> usi ...
- Summer training round2 #7 (Training #23)
A:约瑟夫环 套公式 B:线性筛素数 C:投骰子 概率DP F:有权无向图的生成树(边最大值和最小值只差最小) 直接kruskal G:状压BFS或者双向BFS H:模拟题 I:几何题 J:高斯消元
- Summer training round2 #6 (Training #22)
A:二分答案 如果中位数比目前的大就right=mid-1 else left=mid+1 C!:几何 G:优先队列贪心 #include <bits/stdc++.h> using na ...
- Summer training round2 #5 (Training #21)
A:正着DFS一次处理出每个节点有多少个优先级比他低的(包括自己)作为值v[i] 求A B 再反着DFS求优先级比自己高的求C #include <bits/stdc++.h> #incl ...
- Summer training round2 #4 (Training #20)
A!:UESTC1752 B!:找区间内L到R之间内的数的个数 权值分块加莫队 C!:给你一个哈斯图 去掉其中的几条边 要求输出字典序最大的拓扑排序:线段树模拟拓扑排序 D!:要求你找到最短路树并输 ...
- 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) ...
随机推荐
- RSA签名、验签、加密、解密
最近在做一个项目,与一个支付渠道进行连接进行充值,为了安全,每个接口访问时,都要先登陆(调用登陆接口),拿到一个sessionKey,后续业务接口内容用它来进行3DES加密处理.而登陆需要用到RSA进 ...
- 深入理解红黑树及C++实现
介绍 红黑树是一种特殊的平衡二叉树(AVL),可以保证在最坏的情况下,基本动态集合操作的时间复杂度为O(logn).因此,被广泛应用于企业级的开发中. 红黑树的性质 在一棵红黑树中,其每个结点上增加了 ...
- 【Linux】常用基础命令
修改时间 date -s 月/日/年 例如:date -s 07/31/2019 date -s 时:分:秒 例如:date -s 23:56:50 hwclock -w 将时间写到bois,防止重启 ...
- 网络编程介绍,C/S 架构,网络通讯协议,osi七层
网络编程: 什么是网络编程: 网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的 编写基于网络的应用程序的过程序称之为网络编程 为什么要学习网络编程: 我们已经知道计算机, ...
- python 爬虫 requests模块 目录
requests模块(response常用属性) 基于requests模块的get请求 基于requests模块发起ajax的get请求 基于requests模块发起ajax的post请求
- 第五次java实验报告
Java实验报告 班级 计科二班 学号 20188437 姓名 何磊 完成时间2019/10/10 评分等级 实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实 ...
- windows vue环境搭建
windows环境搭建Vue开发环境 一.安装node.js(https://nodejs.org/en/) 下载完毕后,可以安装node,建议不要安装在系统盘(如C:). 二.设置nodejs pr ...
- Python学习【day02】- 运算符与基本类型
Python语言支持以下类型的运算符: 算术运算符 操作符 描述 示例(a=10.b=21) + 加法 相加运算两侧的值 a + b = 31 - 减法 操作符右侧数减去左侧操作数 a – b = - ...
- JVM 线上故障排查基本操作 (转)
前言 对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的.各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题.楼主同样也遇到过这些问题,那么,遇到这些问题该如何 ...
- div+css布局教程(1)
margin:Margin属性用于设置两个元素之间的距离. 后面如果只有两个参数的话,第一个表示top和bottom,第二个表示left和right因为0 auto,表示上下边界为0,左右则根据宽度自 ...