#include <graphics.h>
#include <conio.h>
int main() {
initgraph(640, 480); // 初始化图形界面
setbkcolor(WHITE); // 设置背景色为白色
cleardevice(); // 清空屏幕
// 绘制缺口的弧形
int x1 = 200, y1 = 200; // 起点坐标
int r1 = 50; // 半径1
int r2 = 30; // 半径2
int angle1 = 0, angle2 = 90; // 起始角度和终止角度
int n = 100; // 圆周上的点数
int i;
for (i = 0; i < n; i++) {
int x = x1 + r1 * cos(angle1) + r2 * sin(angle1);
int y = y1 + r1 * sin(angle1) + r2 * cos(angle1);
setfillcolor(RED); // 设置填充颜色为红色
fillcircle(x, y, r1); // 在圆周上绘制红色小圆点
angle1 += PI/n; // 每次旋转的角度增加PI/n
}
为啥画不成路徽的形状
题解链接.
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
const int N=5003,mod=1e9+7;
int n;
char s[N];
long long f[N][N];//f[i][j]表示前i个序列中左括号比右括号多j个的合法方案数
long long cal()//计算插入括号合法方案数
{
memset(f,0,sizeof f);
f[0][0]=1;//初始化
for(int i=1;i<=n;i++)
{
if(s[i]=='(')
{
for(int j=1;j<=n;j++)
f[i][j]=f[i-1][j-1];
}
else
{
f[i][0]=(f[i-1][0]+f[i-1][1])%mod;//注意0的时候需要特殊处理一下,因为j-1=-1,所以我们不能用化简后的递推式去计算,只能用化简前的递推式去计算
for(int j=1;j<=n;j++)
f[i][j]=(f[i-1][j+1]+f[i][j-1])%mod;
}
for(int i=0;i<=n;i++)//答案要求我们插入的括号数尽量小,所以要从小向大枚举,右括号的数目是不变的,当加入尽量小的左括号且有解时就返回即可
if(f[n][i]) return f[n][i];
}
}
int main()
{
scanf("%s",s+1);
n=strlen(s+1);
long long ans1=cal();//记录左括号的插入方案数
reverse(s+1,s+n+1);//将原序列逆置
for(int i=1;i<=n;i++)
if(s[i]=='(') s[i]=')';
else s[i]='(';
long long ans2=cal();//记录右括号的插入方案数
printf("%lld",ans1*ans2%mod);
return 0;
}
angle1 angle2类型改为浮点型。