网站如何做品牌宣传,建设银行e路通网站,南漳网页设计,wordpress 一键部署被C坑的不行不行的。。。其他题目都还可以。 A - Tricky Sum 求1#xff0c;2#xff0c;3,...,n的加和#xff0c;其中2^x#xff08;x0#xff09;为负。 因为2^x的个数很少#xff0c;所以以每个2^x为分界点进行判断. 初始化x0; 如果n2^x,求出2^(x-1)到2^(x)之…被C坑的不行不行的。。。其他题目都还可以。 A - Tricky Sum 求123,...,n的加和其中2^xx0为负。 因为2^x的个数很少所以以每个2^x为分界点进行判断. 初始化x0; 如果n2^x,求出2^(x-1)到2^(x)之间的加和用等差数列求和公式即可然后x, 如果n2^x,求出2^(x-1)到n之间的加和然后结束. #include iostream
#include stdio.h
#include string
#include string.h
using namespace std;int main(int argc, const char * argv[]) {// insert code here...int T;scanf(%d,T);while (T--) {int n;scanf( %d,n);long long tmp1;long long sum0;while(tmpn){if( tmp-1 tmp/21 ){sum (tmptmp/2)*(tmp-tmp/2-1)/2;}sum - tmp;tmp*2;}sum (tmp/21n)*(n-tmp/2)/2;coutsumendl;}return 0;
} A (感触以后写等差数列求和时写个函数方便些) B - Queries on a String 看懂题目模拟即可。 #include iostream
#include stdio.h
#include string
#include string.h
using namespace std;char str[2][10100];int main(int argc, const char * argv[]) {// insert code here...scanf(%s,str[0]);int m;scanf(%d,m);int a0,b1;for (int i0;im; i) {int l,r,k;scanf(%d%d%d,l,r,k);l--;r--;int tlen(r-l1);k%tlen;strcpy(str[b],str[a]);for(int jl;jr;j){str[b][l (j-lk)%tlen ]str[a][j];}swap(a,b);//printf(%s\n,str[a]);}printf(%s\n,str[a]);return 0;
} B C - Nearest vectors 这题可以看这里里面有我写这题的崎岖之路。 D - Igor In the Museum 很裸的BFS。 不同的是到一个格点搜索一下周围四个方向上墙的个数。 #include iostream
#include stdio.h
#include string
#include math.h
#include algorithm
#include string.h
using namespace std;int n,m,k;
char g[1010][1010];
int mark[1010][1010];
int id;struct node
{int x,y;
}que[1001000];int qf,qd;
int save[1001000];
int up[4]{1,-1,0,0};
int rl[4]{0,0,1,-1};void bfs(int x,int y)
{qfqd0;node fi;fi.xx;fi.yy;int cnt0;que[qf]fi;mark[x][y]id;while(qfqd){node curque[qd];for(int i0;i4;i){int txcur.xup[i];int tycur.yrl[i];if( tx0txn ty0tym ){if(g[tx][ty].mark[tx][ty]-1 ){mark[tx][ty]id;node newnode;newnode.xtx;newnode.yty;que[qf]newnode;}else if(g[tx][ty]*) cnt;}}}save[id]cnt;id;
}int main(int argc, const char * argv[]) {// insert code here...scanf(%d%d%d,n,m,k);for(int i0;in;i)scanf(%s,g[i]);id0;memset(mark,-1,sizeof(mark));for(int i0;in;i)for(int j0;jm;j){if( mark[i][j] -1 g[i][j] . ){bfs(i,j);}}for(int i0;ik;i){int x,y;scanf(%d%d,x,y);x--;y--;printf(%d\n,save[ mark[x][y] ]);}return 0;
} D E - Chocolate Bar DP. 状态 dp[i][j][k] 表示高为i宽为j的巧克力被分成能拼成k的最小花费。 转移 考虑每一种横着切和竖着切的情况。具体看代码。 #include iostream
#include stdio.h
#include string
#include math.h
#include algorithm
#include string.h
using namespace std;
#define INF 100000000
int dp[33][33][55];int main(int argc, const char * argv[]) {dp[1][1][1]0;memset(dp,0,sizeof(dp));for(int i1;i30;i)for(int j1;j30;j)for(int k1;k50;k)dp[i][j][k]INF;dp[1][1][1]0;for(int i1;i30;i)for(int j1;j30;j){if(iji1) continue;for(int k1;kmin(i*j,50);k){if(i*jk){dp[i][j][k]0;continue;}int miINF;for(int i11;i1i;i1){if( i1*j k) mimin(mi,dp[(i-i1)][j][k-i1*j]j*j);if( (i-i1)*j k ) mimin(mi,dp[i1][j][k-(i-i1)*j]j*j);if( i1*j k) mimin(mi,dp[i1][j][k]j*j);if( (i-i1)*j k ) mimin(mi,dp[i-i1][j][k]j*j);}for(int j11;j1j;j1){if( j1*i k ) mimin(mi,dp[i][j-j1][k-j1*i]i*i);if( (j-j1)*i k ) mimin(mi,dp[i][j1][k-(j-j1)*i]i*i);if( j1*i k) mimin(mi,dp[i][j1][k]i*i);if( (j-j1)*i k ) mimin(mi,dp[i][j-j1][k]i*i);}//有四种情况dp[i][j][k]mi;}}int n;scanf(%d,n);while(n--){int x,y,z;scanf(%d%d%d,x,y,z);printf(%d\n,dp[x][y][z]);}return 0;
} E 转载于:https://www.cnblogs.com/chenhuan001/p/4963944.html