网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月15日漏签0天
wikioi吧 关注:1,281贴子:4,437
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1 2 3 4 5 下一页 尾页
  • 72回复贴,共5页
  • ,跳到 页  
<<返回wikioi吧
>0< 加载中...

天梯答案

  • 只看楼主
  • 收藏

  • 回复
  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
接此贴:http://tieba.baidu.com/p/2538422076


  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1018
#include <stdio.h>
#include <string.h>
int Len[21],P[21],MAX,N;char Word[21][100];void DFS(int d,int s){ int i,j,k,l; for (i=1;i<=N;i++) if (P[i]<2) for (j=0;j<Len[d];j++) if (Word[i][0]==Word[d][j]) { for (l=1,k=j+1;k<Len[d]&&Word[i][l]==Word[d][k];k++,l++); if (k<Len[d]) continue; P[i]++; DFS(i,s+Len[i]-l); P[i]--; } if (s>MAX) MAX=s;}int main(){ int i; scanf("%d",&N); for (i=1;i<=N;Len[i]=strlen(Word[i]),i++) scanf("%s",Word[i]); scanf("%s",Word[0]); Len[0]=strlen(Word[0]); DFS(0,Len[0]); printf("%d",MAX); return 0;}


2025-06-15 08:45:13
广告
  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1116
var n,i,j,ans:longint; a:array[1..20] of longint; v:array[1..20,1..20] of longint;procedure search(i:longint);var j,k:longint; flag:boolean;begin if i=n+1 then begin inc(ans); exit; end; for j:=1 to 4 do begin flag:=true; for k:=1 to i do if (v[i,k]=1)and(j=a[k]) then flag:=false; if flag then begin a[i]:=j; search(i+1); end; end;end;begin readln(n); for i:=1 to n do begin for j:=1 to n do read(v[i,j]); readln; end; ans:=0; search(1); writeln(ans);end.


  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1219
#include <cstdio>
int a[11],tot,n,t,i,j;
int main(){
scanf("%d",&n);
for (int p=1;p<=n;p++) a[p]=p;
tot=1;
for (int p=2;p<=n;p++) tot*=p;
while (tot){
tot--;
for (int p=1;p<n;p++) printf("%d ",a[p]);
printf("%d\n",a[n]);
i=n-1;
while (i>0 && a[i]>a[i+1]) i--;
j=n;
while (a[j]<a[i]) j--;
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j=n;
while (i<j){
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j--;
}
}
}


  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1295
#include<stdio.h>
#include<math.h>
int n;
int sum = 0;
int pos[15];//pos的下标为行号,值为列号
int judge(int x)
{
int i;
for(i = 1; i < x; i++)//判断是否在同一斜线或同列
if(abs(x - i) == abs(pos[x] - pos[i]) || pos[x] == pos[i])
return 0;
return 1;
}
int place(int x)
{
if(x > n && n > 0) //当放置的皇后超过n时,可行解个数加1,此时n必须大于0
sum++;
else
for(int i = 1; i <= n; i++)//遍历列数
{
pos[x] = i; //标明第x个皇后放在第x行第i列
if(judge(x)) //judge函数判断第x个皇后放在x行i列是否可行
place(x + 1);//若可行则将第x+1个皇后在第x+1行
}
return sum;
}
int main()
{
int ans;
scanf("%d", &n);
ans = place(1);
if(n == 0)
ans = 0;
printf("%d\n", ans);
return 0;
}


  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
只顾抄,你们倒是说句话啊


  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
终于打完普及了,你们该升提高了!


  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1041
#include <stdio.h>
#include <math.h>
double E[400][400],x[400],y[400],t,w;int k;void Init(){ double u[4],v[4],r=0; int i,j; for (i=0;i<3;i++) scanf("%lf%lf",&u[i],&v[i]); scanf("%lf",&w); for (i=1;i<3;i++) for (j=0;j<i;j++) if ((u[i]-u[j])*(u[i]-u[j])+(v[i]-v[j])*(v[i]-v[j])>r) { r=(u[i]-u[j])*(u[i]-u[j])+(v[i]-v[j])*(v[i]-v[j]); u[3]=u[i]+u[j]-u[3-i-j]; v[3]=v[i]+v[j]-v[3-i-j]; } for (i=0;i<4;i++) { for (j=0;j<4;j++) E[k+i][k+j]=w*sqrt((u[i]-u[j])*(u[i]-u[j])+(v[i]-v[j])*(v[i]-v[j])); for (j=0;j<k;j++) E[k+i][j]=E[j][k+i]=t*sqrt((u[i]-x[j])*(u[i]-x[j])+(v[i]-y[j])*(v[i]-y[j])); x[k+i]=u[i]; y[k+i]=v[i]; } k+=4;}void Work(){ double f=1E20; int i,j,N,A,B; scanf("%d%lf%d%d",&N,&t,&A,&B); k=N*4; for (i=0;i<k;i++) for (j=0;j<k;j++) E[i][j]=f; for (k=0;N>0;N--) Init(); N=k; for (k=0;k<N;k++) for (i=0;i<N;i++) for (j=0;j<N;j++) if (E[i][k]+E[k][j]<E[i][j]) E[i][j]=E[i][k]+E[k][j]; A*=4; B*=4; for (i=1;i<5;i++) for (j=1;j<5;j++) if (E[A-i][B-j]<f) f=E[A-i][B-j]; printf("%.1lf\n",f);}int main(){ int n; scanf("%d",&n); for (;n>0;n--) Work(); return 0;}


2025-06-15 08:39:13
广告
  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1077
var n,q,i,j,k,x,y:longint; a:array[1..100,1..100]of longint;
begin
fillchar(a,sizeof(a),0);
readln(n);
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
for j:=1 to n do
for k:=1 to n do
for i:=1 to n do
if (a[k,j]+a[j,i]<a[k,i]) then a[k,i]:=a[k,j]+a[j,i];
readln(q);
for i:=1 to q do
begin
readln(x,y);
writeln(a[x,y]);
end;
end.


  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1079
#include <stdio.h>
#define getint(i) scanf("%d\n", &i)
#define getmark(a, i) if(i >= 'A' && i <= 'Z'){\
a = 26 + i - 'A';\
}else{\
a = i - 'a';\
}
#define MAX 52
#define INF (1e9)
int map[MAX][MAX];
int n;
void mark(char i, char j, int t)
{
int a, b;
getmark(a, i);
getmark(b, j);
if(map[a][b] != 0){
if(t < map[a][b]){
map[a][b] = t;
map[b][a] = t;
}
return ;
}
map[a][b] = t;
map[b][a] = t;
}
int main(void)
{
int i, j, k, t;
int min = INF, m;
char a, b;
getint(n);
for(i = 0; i < n; i++){
scanf("%c %c %d\n", &a, &b, &t);
mark(a, b, t);
}
for(i = 0; i < MAX; i++){
for(j = 0; j < MAX; j++){
if(map[i][j] == 0 && i != j){
map[i][j] = INF;
}
}
}
for(k = 0; k < MAX; k++)
for(i = 0; i < MAX; i++)
for(j = 0; j < MAX; j++){
if(map[i][j] > map[i][k] + map[k][j]){
map[i][j] = map[i][k] + map[k][j];
map[j][i] = map[i][k] + map[k][j];
}
}
for(i = 26; i < MAX - 1; i++){
if(map[i][51] < min && map[i][51] != 0){
min = map[i][51];
m = i;
}
}
printf("%c %d\n", m - 26 + 'A', min);
return 0;
}


  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1079
#include <stdio.h>
#define getint(i) scanf("%d\n", &i)
#define getmark(a, i) if(i >= 'A' && i <= 'Z'){\
a = 26 + i - 'A';\
}else{\
a = i - 'a';\
}
#define MAX 52
#define INF (1e9)
int map[MAX][MAX];
int n;
void mark(char i, char j, int t)
{
int a, b;
getmark(a, i);
getmark(b, j);
if(map[a][b] != 0){
if(t < map[a][b]){
map[a][b] = t;
map[b][a] = t;
}
return ;
}
map[a][b] = t;
map[b][a] = t;
}
int main(void)
{
int i, j, k, t;
int min = INF, m;
char a, b;
getint(n);
for(i = 0; i < n; i++){
scanf("%c %c %d\n", &a, &b, &t);
mark(a, b, t);
}
for(i = 0; i < MAX; i++){
for(j = 0; j < MAX; j++){
if(map[i][j] == 0 && i != j){
map[i][j] = INF;
}
}
}
for(k = 0; k < MAX; k++)
for(i = 0; i < MAX; i++)
for(j = 0; j < MAX; j++){
if(map[i][j] > map[i][k] + map[k][j]){
map[i][j] = map[i][k] + map[k][j];
map[j][i] = map[i][k] + map[k][j];
}
}
for(i = 26; i < MAX - 1; i++){
if(map[i][51] < min && map[i][51] != 0){
min = map[i][51];
m = i;
}
}
printf("%c %d\n", m - 26 + 'A', min);
return 0;
}


  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1225
#include<stdio.h>
char st[9] = {0};
struct node
{
int val; //康托值
int step; //步数
}map[400000];
int vis[400000];
int factor[] = {1,1,2,6,24,120,720,5040,40320,362880};//阶乘
void swap(char *a, char *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int cantor(char x[]) //康托展开
{
int sum = 0, s;
for(int i = 0; i < 9; i++)
{
s = 0;
for(int j = i + 1; j < 9; j++)
if(x[j] < x[i])
s++;
sum += s * factor[9 - i - 1];
}
return sum;
}
void trans(int x) //康托展开逆运算
{
int visit[10] = {0};
int t;
for(int i = 0; i < 9; i++)
{
t = x / factor[9 - i - 1];
x %= factor[9 - i - 1];
for(int j = 0; j <= t; j++)
if(visit[j] == 1)
t++;
visit[t] = 1;
st[i] = t;
}
}
int main()
{
int zero; //0的位置
int aim = 46685; //目标状态康托值
int head = 0, tail = 1; //首尾指针
for(int i = 0; i < 9; i++)
{
scanf("%c", &st[i]);
st[i] -= '0';
}
map[0].val = cantor(st); //纪录初始状态的康托值
vis[map[0].val] = 1; //标记此状态,以便判重
while(head < tail)
{
if(aim == map[head].val) //找到目标状态就结束
break;
trans(map[head].val);
for(int i = 0; i < 9; i++) //寻找当前状态0的位置
if(st[i] == 0)
{
zero = i;
break;
}
if(zero + 3 <= 8) //向下
{
swap(&st[zero], &st[zero+3]); //交换0与下方数字位置
map[tail].val = cantor(st); //求出交换后的康托值
if(vis[map[tail].val] == 0)
{
vis[map[tail].val] = 1;
map[tail].step = map[head].step + 1; //记录步数 tail++;
}
swap(&st[zero], &st[zero+3]);
}
if(zero - 3 >= 0) //向上
{
swap(&st[zero], &st[zero-3]);
map[tail].val = cantor(st);
if(vis[map[tail].val] == 0)
{
vis[map[tail].val] = 1;
map[tail].step = map[head].step + 1;
tail++;
}
swap(&st[zero], &st[zero-3]);
}
if(zero + 1 >= 0 && zero % 3 != 2)//判断向右是否合法
{
swap(&st[zero], &st[zero+1]);
map[tail].val = cantor(st);
if(vis[map[tail].val] == 0)
{
vis[map[tail].val] = 1;
map[tail].step = map[head].step+1;
tail++;
}
swap(&st[zero], &st[zero+1]); }
if(zero - 1 >= 0 && zero % 3 != 0)//判断向左是否合法
{
swap(&st[zero], &st[zero-1]);
map[tail].val = cantor(st);
if(vis[map[tail].val] == 0)
{
vis[map[tail].val] = 1;
map[tail].step = map[head].step + 1;
tail++;
}
swap(&st[zero], &st[zero-1]);
}
head++;
}
printf("%d\n", map[head].step);
return 0;
}


  • Cancer李小者
  • 省队A类
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
表示楼主好人~~~~


  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
接着发


2025-06-15 08:33:13
广告
  • 儒雅的张正阳
  • 提高三等
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include<stdio.h>
#include<string.h>
int n, m;
int a[100010];
int lowbit(int x)
{
return x & (-x);
}
void update(int pos, int num)
{
while(pos <= n)
{
a[pos] += num;
pos += lowbit(pos);
}
}
int sum(int x)
{
int sum = 0;
while(x > 0)
{
sum += a[x];
x -= lowbit(x);
}
return sum;
}
int main()
{
int i, j, temp;
int que, x, y;
scanf("%d", &n);
memset(a, 0, sizeof(a));
for(i = 1; i <= n; i++)
{
scanf("%d", &temp);
update(i, temp);
}
scanf("%d", &m);
for(i = 1; i <= m; i++)
{
scanf("%d %d %d", &que, &x, & y);
if(que == 1)
update(x, y);
else
printf("%d\n", sum(y) - sum(x - 1));
}
return 0;
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 3 4 5 下一页 尾页
  • 72回复贴,共5页
  • ,跳到 页  
<<返回wikioi吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示