Codeforces Round 313(div1)
题目大意:
给出内角全为120度的六边形的六条边的边长,求由多少边长为1的等边三角形构成。
解题思路:
将六边形补全为一个大的等边三角形,则大的等边三角形的边长为六边形的相邻三边之和,接着减去补的部分。
补的部分是三个边长为认识3个不相邻的六边形边长的长度构成的等边三角形,边长为a的等边三角形,由a*a个边
长为1的小三角形构成。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int main()
{
int a[10];
for(int i=0;i<6;i++)
{
scanf("%d",&a[i]);
}
long long cur=a[0]+a[1]+a[2];
long long ans=cur*cur-a[0]*a[0]-a[2]*a[2]-a[4]*a[4];
cout<<ans<<endl;
return 0;
}
题目大意:
依据给定的规则推断字符串相等。
解题思路:
依照题意递归写就可。
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=200000+1000;
char s1[maxn];
char s2[maxn];
int judge(int st1,int en1,int st2,int en2)
{
int sign=0;
for(int i=st1,j=st2;i<=en1;i++,j++)
{
if(s1[i]!=s2[j])
{
sign=1;
break;
}
}
if(sign==0)
return 1;
else
{
if((en1-st1+1)%2==0)
{
int mid1=st1+(en1-st1+1)/2-1;
int mid2=st2+(en2-st2+1)/2-1;
if(judge(st1,mid1,st2,mid2)&&judge(mid1+1,en1,mid2+1,en2))
return 1;
if(judge(st1,mid1,mid2+1,en2)&&judge(mid1+1,en1,st2,mid2))
return 1;
}
}
return 0;
}
int main()
{
int len1,len2;
scanf("%s%s",s1,s2);
len1=strlen(s1);
len2=strlen(s2);
if(len1!=len2)
cout<<"NO\n"<<endl;
else
{
int sign;
sign=judge(0,len1-1,0,len1-1);
if(sign)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
题目大意:
给定h*w的格子,n个不可走的点。从(1,1)到(h,w)点。每次仅仅能向下或者向右。求有多少种走法?
解题思路:
首先先不考虑不可走的点,有C(h+w-2,h-1)种走法,一共走h+w-2步,向下的有h-1步。
接着考虑当中的不可走的
点,对于一个不可走的点(x,y)。它走到这个的点的走法是dp[i],它少走的是dp[i]*C(h-x,w-y,h-x),于是把每一个不可走
的点当为终点。能够求出全部的走法数。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int h,w,n;
const int maxn=200000+100;
const int mod=1000000000+7;
long long c[maxn];
long long inv[maxn];
long long dp[5000];
struct node
{
int x;
int y;
}a[10000];
long long pow_mod(long long a,int b)//矩阵高速幂
{
long long ans=1;
while(b)
{
if(b&1)
ans=(ans*a)%mod;
a=(a*a)%mod;
b=b/2;
}
return ans;
}
long long com(int x,int y)//求组合数C(x,y)
{
return ((c[x]*inv[y])%mod*inv[x-y])%mod;
}
bool cmp(node u,node v)
{
if(u.x==v.x)
return u.y<v.y;
return u.x<v.x;
}
int main()
{
scanf("%d%d%d",&h,&w,&n);
for(int i=0;i<n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a,a+n,cmp);
long long ans=0;
c[0]=1;
for(int i=1;i<maxn;i++)
c[i]=c[i-1]*i%mod;
inv[0]=1;
for(int i=1;i<maxn;i++)
inv[i]=pow_mod(c[i],mod-2);//费马小定理求逆。a^(p-2)=a^(-1)
ans=com(h+w-2,h-1);
for(int i=0;i<n;i++)
{
dp[i]=com(a[i].x+a[i].y-2,a[i].x-1);
for(int j=0;j<i;j++)//求过第i个点的方法数
{
if(a[j].x<=a[i].x&&a[j].y<=a[i].y)//推断能否够到达i点
{
dp[i]-=(dp[j]*com(a[i].x-a[j].x+a[i].y-a[j].y,a[i].x-a[j].x))%mod;
dp[i]=(dp[i]+mod)%mod;
}
}
ans=(ans-(dp[i]*com(h+w-a[i].x-a[i].y,h-a[i].x))%mod+mod)%mod;
}
cout<<ans<<endl;
return 0;
}
Codeforces Round 313(div1)的更多相关文章
- Codeforces Round #543 Div1题解(并不全)
		
Codeforces Round #543 Div1题解 Codeforces A. Diana and Liana 给定一个长度为\(m\)的序列,你可以从中删去不超过\(m-n*k\)个元素,剩下 ...
 - Codeforces Round #545 Div1 题解
		
Codeforces Round #545 Div1 题解 来写题解啦QwQ 本来想上红的,结果没做出D.... A. Skyscrapers CF1137A 题意 给定一个\(n*m\)的网格,每个 ...
 - Codeforces Round #539 Div1 题解
		
Codeforces Round #539 Div1 题解 听说这场很适合上分QwQ 然而太晚了QaQ A. Sasha and a Bit of Relax 翻译 有一个长度为\(n\)的数组,问有 ...
 - [Codeforces Round #254 div1] C.DZY Loves Colors 【线段树】
		
题目链接:CF Round #254 div1 C 题目分析 这道题目是要实现区间赋值的操作,同时还要根据区间中原先的值修改区间上的属性权值. 如果直接使用普通的线段树区间赋值的方法,当一个节点表示的 ...
 - Codeforces Round #313 (Div. 1)
		
官方英文题解:http://codeforces.com/blog/entry/19237 Problem A: 题目大意: 给出内角和均为120°的六边形的六条边长(均为正整数),求最多能划分成多少 ...
 - dp - Codeforces Round #313 (Div. 1) C. Gerald and Giant Chess
		
Gerald and Giant Chess Problem's Link: http://codeforces.com/contest/559/problem/C Mean: 一个n*m的网格,让你 ...
 - Codeforces Round #313 (Div. 1) B. Equivalent Strings
		
Equivalent Strings Problem's Link: http://codeforces.com/contest/559/problem/B Mean: 给定两个等长串s1,s2,判断 ...
 - Codeforces Round #313 (Div. 1)  A. Gerald's Hexagon
		
Gerald's Hexagon Problem's Link: http://codeforces.com/contest/559/problem/A Mean: 按顺时针顺序给出一个六边形的各边长 ...
 - Codeforces Round #313 (Div. 2)B.B. Gerald is into Art
		
B. Gerald is into Art Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/ ...
 
随机推荐
- BN 详解和使用Tensorflow实现(参数理解)
			
Tensorflow BN具体实现(多种方式): 理论知识(参照大佬):https://blog.csdn.net/hjimce/article/details/50866313 补充知识: ① ...
 - BZOJ 4810 莫队+bitset
			
思路: 看完这道题根本没有思路啊.... 然后我就膜拜了一波题解... 这神tm乱搞思路 维护两个bitset 第一个bitset代表当前区间哪些数出现过 第二个bitset是 maxp-p出现过 差 ...
 - C#WebForm里面aspx,ajax请求后台。。。
			
虽然WebForm里面有那些基本控件,后台CS里面也有许许多多的控件的方法.但是不见得有些标签不需要进行后台的访问,下面介绍一下三种aspx中访问后台的方式.. 第一种:WebMethod (静态方法 ...
 - js仿新浪游戏频道导航条
			
js仿新浪游戏频道导航条 在线演示本地下载
 - C#多线程方法 可传参
			
//将线程执行的方法和参数都封装到一个类里面.通过实例化该类,方法就可以调用属性来实现间接的类型安全地传递参数.using System; using System.Threading; //Thre ...
 - AdaBoost--从原理到实现(Code:Python)
			
本文对原文有修改,若有疑虑,请移步原作者. 原文链接:blog.csdn.net/dark_scope/article/details/14103983 集成方法在函数模型上等价于一个多层神经网络, ...
 - mysql安装包下载地址
			
1.打开mysql官网 :https://dev.mysql.com/ 2.选择 downlad-->windows-->MySQL Installer -->滑动至页面底部,选择第 ...
 - BZOJ 4698: Sdoi2008 Sandy的卡片 后缀数组 + RMQ + 查分
			
题目描述 Sandy和Sue的热衷于收集干脆面中的卡片. 然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型. 每一张卡片都由一些数字进行标记,第i张卡片的 ...
 - 理解Linux CPU负载和 CPU使用率
			
CPU负载和 CPU使用率 这两个从一定程度上都可以反映一台机器的繁忙程度. cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入w ...
 - tesuto-Mobius
			
求 \begin{equation*}\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k]\end{equation*} 的值. 莫比乌斯反演吧. \begin{align*}& ...