nx

【xdoj新手教学】WEEKLY MISSION 3

匿名 (未验证) 提交于 2019-12-03 00:19:01
题目链接 这周基本都是搜索题,做的快吐血了,虽然不是非常难,但是精细的问题还是挺多的,还有一些之前很少遇到的tle和mle,听说还有很多人格式错误,算是“五毒俱全”了,所以每道题还是有不少探讨的地方的。 A 之前想要搞一些花头,结果每次都wa了,所以最后直接暴力写了一个,倒是通过了,不过有点慢就是了。 # include <cstdio> int main() { char s[ 1010 ]; while (~ scanf ( "%s" , s)) { int i, k; bool f = 1 ; while (f) { f = 0 ; k = 0 ; for (i = 0 ; s[i] ; i++) { if (s[i] == 'y' && s[i + 1 ] == 'y' && !f) { s[k++] = 'Y' ; i++; f = 1 ; } else if (s[i] == 'Y' && s[i + 1 ] == 'Y' && !f) { i++; f = 1 ; } else s[k++] = s[i]; } s[k] = 0 ; } puts (s); } return 0 ; } B 这道题和约瑟夫环那道题挺像的,可以用类似xdoj1018里我的方法做,因为这个每次消减的更多,高达一半或者三分之二,所以复杂度仅有logn。说说具体的做法

【HNOI 2019】JOJO

匿名 (未验证) 提交于 2019-12-02 23:57:01
Problem Description JOJO 的奇幻冒险是一部非常火的漫画。漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」。 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 \(x\) 欧拉或者 \(x\) 木大表示有 \(x\) 个欧拉或者木大。 为了简化内容我们现在用字母表示喊出的话。 我们用数字和字母来表示一个串,例如: 2 a 3 b 表示的串就是 aabbb 。 一开始漫画中什么话都没有,接下来你需要依次实现 \(n\) 个操作,总共只有 \(2\) 种操作: 第一种: 1 x c :在当前漫画中加入 \(x\) 个 \(c\) ,表示在当前串末尾加入 \(x\) 个 \(c\) 字符。保证当前串是空串或者串尾字符不是 \(c\) ; 第二种: 2 x :觉得漫画没画好,将漫画还原到第 \(x\) 次操作以后的样子,表示将串复原到第 \(x\) 次操作后的样子,如果 \(x=0\) 则是将串变成空串。如果当前串是 bbaabbb ,第 \(4\) 次操作后串是 bb ,则 2 4 会使 bbaabbb 变成 bb ,保证 \(x\) 小于当前操作数。 众所周知空条承太郎十分聪明,现在迪奥已经被打败了,他开始考虑自己的漫画中的一些问题: 对于一个串的每个前缀 \(A\) ,都有一个最长的比它短的前缀 \(B\) 与前缀 \(A\) 的一个后缀匹配

NOIP2013 华容道

匿名 (未验证) 提交于 2019-12-02 23:56:01
传送门 暴力能拿 \(60\) ~ \(70pts\) 。 具体的...以后再更吧 #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define INF 1e7 #define il inline #define re register #define tie0 cin . tie ( 0 ), cout . tie ( 0 ) #define fastio ios :: sync_with_stdio ( false ) #define File ( x ) freopen ( x ".in" , "r" , stdin ); freopen ( x ".out" , "w" , stdout ) using namespace std ; typedef long long ll ; template < typename T > inline void read ( T & x ) { T f = 1 ; x = 0 ; char c ; for ( c = getchar (); ! isdigit ( c ); c = getchar ()) if ( c == '-' ) f = - 1 ; for ( ; isdigit (

dfs地图类问题

匿名 (未验证) 提交于 2019-12-02 23:48:02
・ P1443 - 马的遍历 1 #include <iostream> 2 #include <iomanip> 3 #include <cstdio> 4 #include <string.h> 5 #include <algorithm> 6 using namespace std; 7 int nx[9]={2,2,-2,-2,1,-1,1,-1}; 8 int ny[9]={1,-1,1,-1,2,2,-2,-2}; 9 int ans[401][401]; 10 int n,tot=0,m,sx,sy,orz,sam; 11 void dfs(int,int,int); 12 int main() 13 { 14 memset(ans,-1,sizeof(ans)); 15 cin>>n>>m>>sx>>sy; 16 dfs(sx,sy,0); 17 for(int i=1;i<=n;i++) 18 { 19 for(int j=1;j<=m;j++) 20 printf("%-5d",ans[i][j]); 21 cout<<endl; 22 } 23 } 24 void dfs(int x,int y,int step) 25 { 26 if(step>130) return; 27 ans[x][y]=step; 28 for(int i=0;i<8;i++)

骑士问题

匿名 (未验证) 提交于 2019-12-02 23:47:01
题目 题目描述 小明是一名出色的棋手,声称没有人能像他那样快速地把骑士从一个位置移到另一个位置,你能打败他吗? 编写一个程序,计算一个骑士从棋盘上的一个格子到另一个格子所需的最小步数。骑士一步可以移动到的位置由下图给出。 输入 第一行给出骑士的数量 n。对于每一个骑士都有3行,第一行一个整数 L 表示棋盘的大小(4≤L≤300),整个棋盘大小为 L×L; 第二行和第三行分别包含一对整数 (x,y),表示骑士的起始点和终点。假设对于每一个骑士,起始点和终点均合理。 输出 对每一个骑士输出一行,一个整数表示需要移动的最小步数。如果起始点和终点相同,则输出 0。 样例输入 3 8 0 0 7 0 100 0 0 30 50 10 1 1 1 1 样例输出 5 28 0分析这道题是一道广搜题,用深搜可能会时间超限。这道题难度也不低,代码很长,需要用到队列queue代码 #include<bits/stdc++.h> using namespace std; bool vis[301][301]; int step[301][301],ans,t,n,sx,sy,ex,ey,nx,ny; int main() { scanf("%d",&t); while(t--){ scanf("%d%d%d%d%d",&n,&sx,&sy,&ex,&ey); queue<int> qx,qy; qx

画山 paint

匿名 (未验证) 提交于 2019-12-02 23:47:01
画山 paint 有一张大小为n*m的白纸,小R想在纸上画一片绵延的群山。 为了描述方便,我们将纸张表示在坐标系上,四个顶点的坐标分别为(0,0),(n,0),(0,m),(n,m)。 小R有一只神奇的画笔,能画p种不同的线段,每种线段用两个参数a,b表示,若画笔停留的位置为(x,y),则能画一条从(x,y)到(x+a,y+b)的线段,然后画笔停留在(x+a,y+b),每种线段能画任意次。 小R需要从(0,0)开始,在(n,0)结束,在不超过纸张大小的范围内(可以在边界上)画一片绵延的群山。求一共有多少种本质不同的山形(亦即我们不认为画两次(1,1)和画一次(2,2)有任何区别)。由于结果可能会很大,你只需输出对1,000,000,007取模后的值。 【数据范围】 对于40%的数据,n,m,p≤10 对于100%的数据,n,m,p≤100,1≤ai≤10,-10≤bi≤10 这数据范围看着就很佛系 先把斜率相同的画笔归类,处理处该画笔可以画多少不同的长度。 可以令f[x][y][i]表示画到(x,y),最后一次用的笔种类是i的方案数 再记s[x][y]表示画到(x,y)总方案数 转移的时候取两个差值,避免同一种笔画两次就行。 1 #include<cstdio> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring>

NX二次开发-UFUN获取当前导出CGM选项设置UF_CGM_ask_session_export_options

匿名 (未验证) 提交于 2019-12-02 23:34:01
文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了; 在UFUN里面没有直接的函数; 思路就是: 1 、先将工程图转换为cgm 2 、调用系统的cgm2pdf . exe工具,将上一步转换的cgm再转成PDF格式; 以下是我写的一个例子。大家可以拿一个工程图测试以下代码,最后会在C盘生成tkl . cgm与tkl . pdf两个文件。 # include <uf.h> # include <uf_draw.h> # include <uf_cgm.h> # include <windows.h> UF_initialize ( ) ; tag_t drawing_tag = NULL_TAG ; UF_DRAW_ask_current_drawing ( & drawing_tag ) ; if ( drawing_tag != NULL_TAG ) { UF_CGM_export_options_t export_options ; UF_CGM_ask_default_export_options ( & export_options ) ; //UF_CGM_ask_session_export_options(&export

【刷题】【dp】help jimmy!

时光总嘲笑我的痴心妄想 提交于 2019-12-02 22:42:12
看着复杂,其实理一理之后还好 重要的是 伪代码技巧 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> using namespace std; int n,mxh; const int N=1e3+3,inf=1<<30; struct node { int l,r,h; bool operator < (const node & o) const { return h>o.h; } //我先处理上面的,然后递归深入 }d[N]; int f[N][2]; int find(int st,int x ,int low) { for(int i=st;i<=n;i++) if(d[i].h <low)//超过mxh,就算找到了也没用,不如直接清掉 return n+1; else if(d[i].l <=x && d[i].r >=x )//恰好落在平台边缘,视作落在平台上 return i; return n+1; } bool vis[N]; void work(int nw) { //我已经memset成inf了,所以直接找能走的更新就行 if(vis[nw]) return ; vis[nw]=true; //往左走 int x=d[nw].l ; int nx=find(nw+1

CF723D 【Lakes in Berland】

…衆ロ難τιáo~ 提交于 2019-12-02 06:39:11
题目链接 题解 CF723D 【Lakes in Berland】 首先将边界的水用bfs处理掉 再将中间的每一个湖泊处理出来,存入一个结构体内,结构体里记录湖泊大小和开始点 将湖泊排序从小往大填满,并利用开始点进行bfs改变地图 细节见代码: #include<bits/stdc++.h> using namespace std; int n,m,k; int vis[100][100],mapp[100][100]; int dx[5]={0,-1,0,1,0}; int dy[5]={0,0,1,0,-1},cnt; struct SYM{ int cc,sx,sy; }lake[10000]; void bfs(int x,int y,int opt){ queue<int> qx,qy;int siz=0; if(opt==1){ //处理边界 vis[x][y]=1;qx.push(x);qy.push(y); while(!qx.empty()){ int xx=qx.front(),yy=qy.front();qx.pop();qy.pop(); for(int i=1;i<=4;i++){ int nx=xx+dx[i],ny=yy+dy[i]; if(nx==0||ny==0||nx==n+1||ny==m+1) continue; if(vis[nx][ny]

[CF1236D] Alice and the Doll - 模拟,STL

与世无争的帅哥 提交于 2019-12-01 23:48:57
[CF1236D] Alice and the Doll Description \(N \times M\) 网格,有 \(K\) 个格子里有障碍物。每次经过一个格子的时候只能直走或者右转一次。初态在 \((1,1)\) 格子向上。求是否存在一条路径经过所有无障碍格子恰好一次。 Solution 最优的走法是遇到障碍或者边界就右转,否则直走。 走过一排格子相当于挪动边界线。 这两个结论仔细品味起来很挺有深度的。 然后暴力模拟就可以了,找障碍物的过程可以用 set 优化。 这题的坐标系好像有点奇怪,SB的我就这么搞反坐标WA了一发。然后忘记开longlong又WA了一发。 Code #include <bits/stdc++.h> using namespace std; #define int long long const int N = 100005; int n,m,k,t1,t2,t3,t4,lx,ly,ux,uy,dir,ans=1; set <int> sx[N],sy[N]; int FindIncX(int x,int y) { return min(ux,*sy[y].lower_bound(x)); } int FindDecX(int x,int y) { return max(lx,*(--sy[y].lower_bound(x))); } int