ACM/ICPC乌鲁木齐2017解题报告

历年ACM-ICPC比赛 历年icpc:http://codeforces.com/gyms?filterContestType=Official+ACM-ICPC+Contest&order=ID_DESC CCPC2018-湖南全国邀请赛-重现赛(感谢湘潭大学) 2018中国大学生程序设计竞赛 - 网络选拔赛 ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 ACM-ICPC国际大学生程序设计竞赛北... 阅读详情

两位队友的博客:

http://hzwer.com/

http://kuribohg.github.io/

BEH三题是我写的,其余题目鸣谢二位大腿。

A:Banana

开始样例错了。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int T,n,m,a[100][100],b[100][100],ans[100][100];
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=50;i++)
            for(int j=1;j<=50;j++)
                a[i][j]=0,b[i][j]=0,ans[i][j]=0;
        for(int i=1,x,y;i<=n;i++)
            scanf("%d%d",&x,&y),a[x][y]=1;
        for(int i=1,x,y;i<=m;i++)
            scanf("%d%d",&x,&y),b[x][y]=1;
        for(int i=1;i<=50;i++)
            for(int j=1;j<=50;j++)
                for(int k=1;k<=50;k++)
                    if(a[i][k]&&b[k][j]) ans[i][j]=1;
        for(int i=1;i<=50;i++)
            for(int j=1;j<=50;j++)
                if(ans[i][j]) printf("%d %d\n",i,j);
        puts("");
    }
    return 0;
}


B:Out-out control cars

题意:两个三角形匀速直线运动,问是否会撞上。

题解:只需单独计算每个三角形的某个顶点是否会和另一个三角形撞上,进一步地,只需要计算每个三角形的每个顶点是否与另一个三角形的每一条边撞上。方法就是计算一下相对速度(建立一个坐标系,相当于三角形静止,顶点匀速直线运动),然后问题转化为射线和线段相交,解二元一次方程组即可。

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const double eps=1e-10;
bool solve_mat(double a00,double a01,double a10,double a11,double b0,double b1,double &x0,double &x1){
    double det=a00*a11-a01*a10;
    if(fabs(det)<eps) return false;
    x0=(+a11*b0-a01*b1)/det;
    x1=(-a10*b0+a00*b1)/det;
    return true;
}
class Point{
public:
    double x,y;
    Point(){}
    Point(double _x,double _y):x(_x),y(_y){}
    Point operator + (const Point &b){return Point(x+b.x,y+b.y);}
    Point operator - (const Point &b){return Point(x-b.x,y-b.y);}
    Point operator * (double b){return Point(x*b,y*b);}
};
bool solve_prm(Point p0,Point d0,Point p1,Point d1,double &t0,double &t1){
    //p0+d0*t0 = p1+d1*t1
    double a00=d0.x,a01=-d1.x;
    double a10=d0.y,a11=-d1.y;
    double b0=p1.x-p0.x;
    double b1=p1.y-p0.y;
    return solve_mat(a00,a01,a10,a11,b0,b1,t0,t1);
}
bool hit(Point p,Point d,Point a,Point b){
    //if ray p+dt hits [a,b]
    double t0,t1;
    if(!solve_prm(p,d,a,b-a,t0,t1)) return false;
    if(t0<0) return false;
    if(t1<0||t1>1) return false;
    return true;
}
bool work(void){
    Point A[3],Ad;
    Point B[3],Bd;
    for(int i=0;i<3;i++) scanf("%lf%lf",&A[i].x,&A[i].y);scanf("%lf%lf",&Ad.x,&Ad.y);
    for(int i=0;i<3;i++) scanf("%lf%lf",&B[i].x,&B[i].y);scanf("%lf%lf",&Bd.x,&Bd.y);
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            Point p=A[i];
            Point d=Ad-Bd;
            Point a=B[j],b=B[(j+1)%3];
            if(hit(p,d,a,b)) return true;
            p=B[i];
            d=Bd-Ad;
            a=A[j],b=A[(j+1)%3];
            if(hit(p,d,a,b)) return true;
        }
    }
    return false;
}
int main(){
    int T;scanf("%d",&T);
    for(int tot=1;tot<=T;tot++){
        printf("Case #%d: ",tot);
        if(work()) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

C:Coconut

代码:
#include<map>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mod 1000000007
#define ll long long
using namespace std;
ll read()
{
    ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int T;
int n, b;
int c[1005], d[1005];
int main()
{
    T = read();
    while(T--)
    {
        n = read(); b = read();
        for(int i = 1; i <= n; i++)
            c[i] = read();
        for(int i = 1; i < n; i++)
            d[i] = read();
        int tot = 0;
        bool flag = 1;
        for(int i = 1; i < n; i++)
        {
            tot += c[i] - d[i] * b;
            if(tot < 0)
            {
                puts("No");
                flag = 0;
                break;
            }
        }
        if(flag)puts("Yes");
    }
    return 0;
}

D:Hack Portals

题意:数轴上有一堆点。你可以每秒走长度1,也可以静止。每个点有一个出现时间,你必须按任意顺序访问所有的点(在其出现之后),你一开始在0,最后回到坐标K,问最少需要多少秒。坐标均为整数,点数和坐标不超过1000,出现时间不超过32768.
题解:枚举一开始在0静止的时长。然后一定是:先走到没被访问的最右点,再走到没被访问的最左点……直到完成。该过程可以O(n)模拟,见代码。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
using namespace std;
const int MAXN=1010;
int T,n,L,K,gol[MAXN],x[MAXN],y[MAXN];
int q[MAXN],l,r;
bool used[MAXN];
bool cmp(int i,int j)
{
    return x[i]<x[j];
}
int main()
{
    scanf("%d",&T);
    for(int cas=1;cas<=T;cas++)
    {
        printf("Case #%d: ",cas);
        scanf("%d%d%d",&n,&L,&K);
        for(int i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]);
        for(int i=1;i<=n;i++) q[i]=i;
        sort(q+1,q+n+1,cmp);
        int ans=1000000000;
        for(int t=0;t<=32768;t++)
        {
            l=1,r=n;
            bool ok=true;
            int nowx=0,nowy=t;
            while(true)
            {
                if(nowy+x[q[r]]-nowx<y[q[r]]) {ok=false;break;}
                nowy+=x[q[r]]-nowx,nowx=x[q[r]];
                while(l<=r&&y[q[l]]-x[q[l]]<=nowy-nowx) l++;
                if(l>r) break;
                if(nowy+nowx-x[q[l]]<y[q[l]]) {ok=false;break;}
                nowy+=nowx-x[q[l]],nowx=x[q[l]];
                while(r>=l&&x[q[r]]+y[q[r]]<=nowx+nowy) r--;
                if(l>r) break;
            }
            if(ok) ans=min(ans,nowy+abs(nowx-K));
        }
        printf("%d\n",ans);
    }
    return 0;
}


E:Half-consecutive Numbers

题意:定义序列t[i]=i*(i+1)/2,每次给定一个n,问t序列第n项以后的第一个完全平方数是什么,n<=10^16。
题解:i和i+1/2互质,故要么i=n^2, i+1=2m^2,或者i=2m^2, i+1=n^2。枚举n,n不超过10^8,  打表。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<set>
using namespace std;
typedef long long LL;
bool test(LL x){
    LL r=sqrt(x+0.5);
    return r*r==x;
}
bool check(LL n,LL k){
    LL m=n*n+k;
    return test(m/2);
}
LL lis[100]={0LL,1LL,8LL,49LL,288LL,1681LL,9800LL,57121LL,332928LL,1940449LL,11309768LL,65918161LL,384199200LL,2239277041LL,13051463048LL,76069501249LL,443365544448LL,2584123765441LL,15061377048200LL,87784138523761LL,511643454094368LL,2982076586042449LL,17380816062160328LL,};
int main(){
    /*freopen("ilis.out","w",stdout);
    LL mx=1e16;
    cout<<check(3,-1)<<endl;
    for(LL i=1;;i+=2){
        if(check(i,-1)){
            cout<<(i*i-1)<<"LL,";
            if(i*i-1>=mx) break;
        }
        if(check(i,1)){
            cout<<i*i<<"LL,";
            if(i*i>=mx) break;
        }
    }*/
    int T;scanf("%d",&T);
    for(int tot=1;tot<=T;tot++){
        LL n;scanf("%lld",&n);
        int i;for(i=0;lis[i]<n;i++);
        printf("Case #%d: %lld\n",tot,lis[i]);
    }
    return 0;
}

F:Islands

题解:缩点之后,所有块的入度、出度取max。
代码:
#include<map>
#include<set>
#include<cmath>
#include<stack>
#include<deque>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define eps 1e-12
#define mp(a, b) make_pair(a, b)
#define ll long long
#define inf 9000000000000000000LL
#define mod 1000000007
#define pa pair<int,int>
using namespace std;
int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int T, n, m;
int ind, scc, top;
int in[10005], out[10005];
int low[10005], dfn[10005], q[10005], bl[10005];
bool inq[10005];
vector<int>e[10005];
void tarjan(int x)
{
	low[x] = dfn[x] = ++ind;
    q[++top]=x; inq[x]=1;        
	for(int i = 0; i < e[x].size(); i++)
		if(!dfn[e[x][i]])
		{
			tarjan(e[x][i]);
			low[x] = min(low[x], low[e[x][i]]);
		}
		else if(inq[e[x][i]])
            low[x] = min(low[x], dfn[e[x][i]]);
    if(low[x] == dfn[x])
    {
        int now = 0; scc++;
        while(x != now)
        {
            now = q[top]; top--;
            bl[now] = scc;
            inq[now] = 0;
        }
    }
}
int main()
{
    T = read();
    while(T--)
    {
        scc = ind = 0;
        memset(dfn, 0, sizeof(dfn));
        memset(low, 0, sizeof(low));
        memset(out, 0, sizeof(out));
        memset(in, 0, sizeof(in));
        memset(bl, 0, sizeof(bl));
        for(int i = 1; i <= 10000; i++)
            e[i].clear();        
        n = read(); m = read();
        for(int i = 1; i <= m; i++)
        {
            int u = read(), v =read();
            e[u].push_back(v);
        }
        for(int i = 1; i <= n; i++)
            if(!dfn[i])tarjan(i);
        for(int i = 1; i <= n; i++)
            for(int j = 0; j < e[i].size(); j++)
                if(bl[i] != bl[e[i][j]])
                    in[bl[e[i][j]]]++, out[bl[i]]++;
        int t1 = 0, t2 = 0;
        for(int i = 1; i <= scc; i++)
        {
            if(!in[i])t1++;
            if(!out[i])t2++;
        }
        if(scc == 1)puts("0");
        else printf("%d\n", max(t1, t2));
    }
    return 0;
}

G:Query on String

题意:给字符串S,T,T的长度不超过10.每次询问S[l..r]中有多少个T,或者改S的一位。
题解:先预处理一下,就变成了区间和查询。改S的一位至多影响10个值,用树状数组即可。
代码:
#include<map>
#include<set>
#include<cmath>
#include<stack>
#include<deque>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define eps 1e-12
#define mp(a, b) make_pair(a, b)
#define ll long long
#define inf 9000000000000000000LL
#define mod 1000000007
#define pa pair<int,int>
using namespace std;
int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int q, n, m, Tes;
int t[100005];
void add(int x, int val)
{
    x++;
    if(val == 0)return;
    for(int i = x; i <= n; i += i & -i)
        t[i] += val;
}
int query(int x)
{
    x++;
    int ans = 0;
    for(int i = x; i; i -= i & -i)
        ans += t[i];
    return ans;
}
string S, T;
bool check(int x)
{
    if(x + m - 1 > n - 1)return 0;
    for(int i = 0; i < m; i++)
        if(S[x + i] != T[i])return 0;
    return 1;
}
int main()
{
    Tes = read();
    while(Tes--)
    {
        memset(t, 0, sizeof(t));
        q = read();
        cin >> S; n = S.length();
        cin >> T; m = T.length();
        for(int i = 0; i < n; i++)
            add(i, check(i));
        char ch[2];
        while(q--)
        {
            scanf("%s", ch);
            if(ch[0] == 'Q')
            {
                int l = read() - 1, r = read() - 1;
                r = r - m + 1;
                if(l > r)
                {
                    puts("0");
                }
                else
                {
                    int ans = query(r) - query(l - 1);
                    printf("%d\n", ans);
                }
            }
            else
            {
                int pos = read() - 1;
                scanf("%s", ch);
                for(int i = max(0, pos - m + 1); i <= pos; i++)
                    add(i, -check(i));
                S[pos] = ch[0];
                for(int i = max(0, pos - m + 1); i <= pos; i++)
                    add(i, check(i));
            }
        }
        puts("");
    }
    return 0;
}


H:Skiing

题意:DAG最长路。DAG是题目保证的……
题解:随便写。我抄了个SPFA的板子。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int INF=0x7fffffff/2;
const int SIZEN=10010;
int N,M;
vector<pair<int,int> > c[SIZEN];
void SPFA(vector<pair<int,int> > c[SIZEN],int N,int S,int f[SIZEN]){//图中顶点0~N-1,邻接表为c,以S出发,结果存于f
	queue<int> Q;
	bool inq[SIZEN]={0};
	for(int i=0;i<=N+1;i++) f[i]=-INF;
	f[S]=0,inq[S]=true,Q.push(S);
	while(!Q.empty()){
		int x=Q.front();Q.pop();inq[x]=false;
		for(int i=0;i<c[x].size();i++){
			int u=c[x][i].first;
			if(f[x]+c[x][i].second>f[u]){
				f[u]=f[x]+c[x][i].second;
				if(!inq[u]){
					inq[u]=true;
					Q.push(u);
				}
			}
		}
	}
}
int f[SIZEN];
void work(void){
    SPFA(c,N,0,f);
    printf("%d\n",f[N+1]);
}
void read(void){
    scanf("%d%d",&N,&M);
    int a,b,w;
    for(int i=0;i<=N+1;i++) c[i].clear();
    for(int i=1;i<=M;i++){
        scanf("%d%d%d",&a,&b,&w);
        c[a].push_back(make_pair(b,w));
    }
    for(int i=1;i<=N;i++){
        c[0].push_back(make_pair(i,0));
        c[i].push_back(make_pair(N+1,0));
    }
}
int main(){
    int T;scanf("%d",&T);
    while(T--){
        read();
        work();
    }
    return 0;
}

I:Colored Graph

题意:给一张N个点完全图,求把每条边黑白染色,最少生成多少个纯色三角形。

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int T,n;
int d[510][510],a[510];
int gcd(int a,int b)
{
    if(b==0) return a;
    return gcd(b,a%b);
}
void print()
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            printf("%d",d[i][j]);
            if(j!=n) putchar(' ');
            else printf("\n");
        }
}
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        if(n%2==0)
        {
            for(int i=1;i<=n/2;i++)
                for(int j=1;j<=n/2;j++)
                    if(i!=j) d[i][j]=2;
            for(int i=n/2+1;i<=n;i++)
                for(int j=n/2+1;j<=n;j++)
                    if(i!=j) d[i][j]=2;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    if(i!=j&&d[i][j]==0) d[i][j]=1;
        }
        else if(n%4==1)
        {
            int total=0;
            for(int i=1;i<n;i++)
            {
                int xx=gcd(i,n);
                total++;
                for(int st=1;st<=xx;st++)
                {
                    int now=st;
                    for(int j=1;j<=n/xx;j++)
                    {
                        int p=(now+i)%n;
                        if(p==0) p=n;
                        d[now][p]=d[p][now]=1;
                        now=p;
                    }
                }
                if(total==(n-1)/4) break;
            }
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    if(i!=j&&d[i][j]==0) d[i][j]=2;
        }
        else
        {
            int m=n-2;
            int total=0;
            for(int i=1;i<m;i++)
            {
                int xx=gcd(i,m);
                total++;
                for(int st=1;st<=xx;st++)
                {
                    int now=st;
                    for(int j=1;j<=m;j++)
                    {
                        int p=(now+i)%m;
                        if(p==0) p=m;
                        d[now][p]=d[p][now]=1;
                        now=p;
                    }
                }
                if(total==(m-1)/4) break;
            }
            for(int i=1;i<=m;i++)
                for(int j=1;j<=m;j++)
                    if(i!=j&&d[i][j]==0) d[i][j]=2;
            for(int i=1;i<=m/2;i++) d[m+1][i]=1,d[i][m+1]=1;
            for(int i=m/2+1;i<=m;i++) d[m+1][i]=2,d[i][m+1]=2;
            for(int i=1;i<=m/2+1;i++) d[m+2][i]=2,d[i][m+2]=2;
            for(int i=m/2+2;i<=m;i++) d[m+2][i]=1,d[i][m+2]=1;
            d[m+1][m+2]=d[m+2][m+1]=1;
        }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(d[i][j]==1) a[i]++;
        int ans=n*(n-1)*(n-2)/6;
        int sum=0;
        for(int i=1;i<=n;i++) sum+=a[i]*(n-1-a[i]);
        ans-=sum/2;
        printf("%d\n",ans);
        print();
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                d[i][j]=0;
        for(int i=1;i<=n;i++) a[i]=0;
    }
    return 0;
}

J:Our Journey of Dalian Ends

题意:一张无向图,求从1走到N,必须经过K,每个节点至多经过一次的最短路。

题解:费用流。

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#define next next2
using namespace std;
const int INF=1000000000;
int TT,m,tot;
char str1[100010],str2[100010];
map<string,int> M;
int getid(char s[])
{
    string str=string(s);
    if(M.find(str)==M.end())
    {
        M[str]=++tot;
        return tot;
    }
    else return M[str];
}
struct Edge
{
    int x,y,w;
    Edge(){}
    Edge(int x,int y,int w):x(x),y(y),w(w){}
}E[100010];
const int MAXN=100010;
const int MAXM=200010;
int S,T;
int head[MAXN],fr[MAXM],to[MAXM],next[MAXM],from[MAXM],cnt=1;
int w[MAXM],c[MAXM],cost,flow,dis[MAXN];
int q[MAXN],l,r;
bool used[MAXN];
inline void adde(int f,int t,int ww,int cc)
{
    cnt++,fr[cnt]=f,to[cnt]=t,w[cnt]=ww,c[cnt]=cc,next[cnt]=head[f],head[f]=cnt;
    cnt++,fr[cnt]=t,to[cnt]=f,w[cnt]=0LL,c[cnt]=-cc,next[cnt]=head[t],head[t]=cnt;
}
bool SPFA()
{
	for(int i=1;i<=T;i++) dis[i]=INF,from[i]=0;
	dis[S]=0,used[S]=true,q[l=0]=S,r=1;
	while(l!=r)
	{
		int x=q[l++];if(l==T) l=0;
		used[x]=false;
		for(int i=head[x];i;i=next[i])
			if(w[i]>0&&dis[to[i]]>dis[x]+c[i])
			{
				dis[to[i]]=dis[x]+c[i];
				from[to[i]]=i;
				if(!used[to[i]])
				{
					q[r++]=to[i];
					if(r==T) r=0;
					used[to[i]]=true;
				}
			}
	}
	return dis[T]!=INF;
}
void DFS()
{
	int x=INF;
	for(int i=from[T];i;i=from[fr[i]])
		x=min(x,w[i]);
	flow+=x;
	for(int i=from[T];i;i=from[fr[i]])
		w[i]-=x,w[i^1]+=x,cost+=c[i]*x;
}
void MCMF()
{
	while(SPFA())
		DFS();
}
int main()
{
    scanf("%d",&TT);
    while(TT--)
    {
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
        {
            int www;
            scanf("%s%s%d",str1,str2,&www);
            int x=getid(str1),y=getid(str2);
            E[i]=Edge(x,y,www);
        }
        for(int i=1;i<=tot;i++) adde(i,tot+i,1,0);
        for(int i=1;i<=m;i++) adde(tot+E[i].x,E[i].y,INF,E[i].w),adde(tot+E[i].y,E[i].x,INF,E[i].w);
        int dalian=getid("Dalian");
        int xian=getid("Xian");
        int shanghai=getid("Shanghai");
        S=2*tot+1,T=2*tot+2;
        adde(S,shanghai,2,0);
        adde(shanghai,tot+shanghai,1,0);
        adde(tot+dalian,T,1,0);
        adde(tot+xian,T,1,0);
        MCMF();
        if(flow!=2) puts("-1");
        else printf("%d\n",cost);
        M.clear();
        for(int i=1;i<=T;i++) head[i]=0;
        cnt=1;
        flow=0,cost=0;
        tot=0;
    }
    return 0;
}



从2017 ACM-ICPC亚洲区banana题看贪心与动态规划思维训练 贪心和动态规划是算法竞赛中的核心思想,通过局部最优选择或状态转移求解复杂问题。贪心算法依赖排序或优先队列实现高效选取,动态规划则通过状态定义和转移方程处理重叠子问题。掌握这些算法能显著提升问题转化和边界处理能力,广泛应用于路径规划、资源分配等场景。本文以2017 ACM-ICPC亚洲区banana题为例,深入拆解贪心策略与动态规划的实战应用,帮助读者强化算法思维。 阅读详情

相关推荐

Sipeed麦克风阵列板练习

麦克风阵列板 Maix Dock Sipeed

sunshinebigbig的博客 3830

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 F. Islands

题意:已知一个有向图,问最少要补多少条边使得图强连通。 解题思路:原题  HDU 2767 Proving Equivalences……(强连通 Tarjan+缩点) #include #include #include #include #include #include #include #include #inc

LP_Cong 707

基于DPABI和SPM12的任务态fMRI分析笔记1——预处理

前言 原理简介 预处理

Sophia2023的博客 1万+

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛---Half-consecutive Numbers

Half-consecutive Numbers The numbers 11, 33, 66, 1010, 1515, 2121, 2828, 3636, 4545 and t_i=\frac{1}{2}i(i+1)t ​i ​​ = ​2 ​ ​1 ​​ i(i+1), are called half-consecutive. For given NN, find the smallest rr which is no smaller than NN such that t_rt ​r ​​ i

coastline_x的博客 403

工业级24V电源保护电路深度解析:五重防护机制详解

自恢复保险丝(PPTC,Positive Temperature Coefficient)是一种过流保护元件✅可恢复:过流后自动恢复,无需更换⚡响应快:电流超标立即动作🔄多次使用:在额定范围内可反复使用第1层(F1):阻挡过流 → 物理熔断第2层(D3):吸收浪涌 → 能量泄放第3层(Q1):防止反接 → 逻辑阻断第4层(Q2/Q3):抵御过压 → 主动切断第5层(CR):平滑启动 → 时序控制设计哲学:"让每一级保护专注做好一件事"通过这篇文章,我们深入理解了:✅自恢复保险丝。

qq_58068673的博客 3558

Unity实时控制佳能单反拍照全流程(附EDSDK 3.6.1配置避坑指南)

本文详细介绍了在Unity中实时控制佳能单反相机进行拍照的完整流程,重点提供了EDSDK 3.6.1的配置与避坑指南。内容涵盖从SDK获取、环境搭建、相机初始化、参数设置到实现拍照控制,并深入探讨了实时取景的延迟优化方案与资源管理,旨在帮助开发者高效集成专业相机,提升AR/VR及摄影测量等应用的视觉输入质量。

go5gopher的博客 182

2017 ACM-ICPC 网络赛 总结

整个九月,就在区域赛网络赛中度过了……8月有多校9月有网络赛,过的十分充实。坚持下来的这两个月,使我提升巨大!成功跨越了一个瓶颈期,现在终于有能力去攻克一些高难度的算法了。平时过得也很开心,最高兴的就是认识了一大堆热爱ACM的小伙伴们。今年大一来了很多大神,希望他们都能坚持下并取得好成绩吧! 我也把我们今年做出来的每一道题包括后来补的题都写了题解发了博客,希望对下一届的小伙伴们有所帮助!

LP_Cong 2586

从CAD图纸到GIS地图:手把手教你用Global Mapper处理DWG文件(含坐标配准)

本文详细介绍了如何使用Global Mapper将CAD图纸(DWG文件)转换为GIS地图,包括坐标配准、图层与属性转换等关键步骤。通过四参数变换和控制点匹配技术,确保数据精准转换,适用于测绘、城市规划等领域。文章还提供了高级处理技巧和质量控制流程,帮助用户高效完成GIS化工作。

weixin_29196891的博客 520

2017ACM-ICPC乌鲁木齐之旅

写在前面        由于乌鲁木齐站的延期与CCPC的决赛冲突了,ObjectNotFound队把机会让给了我们队,由于我明年不搞了,教练不怎么想让我去,后来不知怎么的就把他说服了,迷迷糊糊的。 Day0        第一次坐飞机,天黑没看到啥。最后降落的时候,机长来了个自由落体,慌死了。 Day1        宾馆的早餐,真的是量大。下午热身赛,状态极差,一道线段树,题目没看完,

狂奔的蜗牛 726

MIPI DPHY接口(基于Xilinx FPGA实现)案例分析

在Xilinx FPGA实现MIPI DPHY接口的案例(包括CIS协议层)。截止目前为止,Xilinx仅在Ultrascale+及其以上版本的FPGA IO可直接支持MIPI 电平输入,其他的,都需要转换成LVDS来接收。

ONEFPGA的博客 5623

QT实现计算器(C/C++)

digitClicked()槽函数用于处理数字按钮的点击事件,operatorClicked()槽函数用于处理运算符按钮的点击事件,equalsClicked()槽函数用于处理等号按钮的点击事件。在operatorClicked()槽函数中,我们获取被点击按钮的文本作为当前运算符,并将文本框中的内容转换为双精度浮点数,存储为操作数1。在上述代码中,我们添加了一个私有成员变量m_operand1,用于存储第一个操作数的值,以及一个私有成员变量m_currentOperator,用于存储当前运算符的值。

CyberNova的博客 384

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 I.Colored Graph【思维+贪心构造】

In graph theory, graph colouring is a special case of graph labelling. It is an assignment of labels traditionally called colours to edges of a graph. Here we consider the simplest form. Given an u

mengxiang000000 679

基于加速科技ST2500的SN74HC00N芯片测试计划

实际上随着工艺的进步,器件内部和引脚间的绝缘氧化膜越来越薄,导致漏电流发生的概率更大,另外制造过程中的工艺缺陷导致的桥接,异物或封装过程中造成的芯片划伤、引裂,都会造成IC的漏电流偏大,有部分产品可能会表现出漏电流偏大,但功能正常,此类产品具有潜在的可靠性问题,漏电流测试的目的就是把具有此类缺陷的产品筛选出来,避免其流到最终产品造成更大的损失。漏电流的测试方法相对简单,就是根据产品手册或测试规范对被测引脚施加额定的电压,然后测量其输入或流出的电流是否符合相应的设计规范。74HC00引脚功能如表所示。

weixin_68288412的博客 1431

ACM-ICPC 2017 Asia Urumqi A.Coins解题报告

ACM-ICPC 2017 Asia Urumqi A.Coins 题目大意 有nnn枚硬币反面朝上,有mmm次操作,每次需要投掷ppp枚硬币,问你最后正面朝上的硬币个数的期望是多少 解题思路 dp[i][j]dp[i][j]dp[i][j]表示第iii次投掷有jjj枚硬币正面朝上的概率,dp[i][j+k]dp[i][j+k]dp[i][j+k]表示在第iii次投掷时有kkk枚硬币变成了正面朝上的概率,那么其转移方程即为: {dp[i][j+k]=∑dp[i−1][j]×Cpk×2−p &nbs

weixin_44211980的博客 235

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ACM算法竞赛生涯总结---ACM-ICPC墓志铭

其实去年打完 ECL-FINAL就应该写这个墓志铭了的,奈何当时由于各种原因,心情不好,前途无望,加上考试周在即就一直没有写。 算起来我的算法竞赛生涯占了整整1.5年,3/8 的大学生涯。大学以前是一点也不了解这个东西的,甚至没有接触过计算机,大学所学专业(信息与计算科学)也与计算机不太沾边。大一上期在MOOC上学了C语言,接着学了C++、JAVA算是有基本的编程能力了吧,大一下学了THU在学堂...

taotao 的大学墓志 9392

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛A题 : BananaC题 : Coconut

我家有个zz~ 4053

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 A,C,F , H

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛A. BananaBananas are the favoured food of monkeys. In the forest, there is a Banana Company that provides bananas from different places. The company has two lists. The fi

等我红名,我就再也不code了 562

2017 ACM/ICPC Asia Regional Shenyang Online 1008 transaction transaction transaction

http://acm.hdu.edu.cn/showproblem.php?pid=6201 任然是一道有向图求最长路的题目,只不过需要在输入的时候处理一下边的权值,几乎和"2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H skiing "这道题没有区别。

三水的鱼塘♂ 415

计蒜客网站 ACM-ICPC亚洲区赛题

The Preliminary Contest for ICPC China Nanchang National Invitational(2019) ACM-ICPC Jiaozuo Onsite 2018 - 比赛 - 计蒜客 ACM-ICPC Xuzhou Onsite 2018 - 比赛 - 计蒜客 ACM-ICPC Shenyang Oniste 2018 - 比赛 - 计蒜客 ...

海岛Blog 1147

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 - E Half-consecutive Numbers

The numbers 11, 33, 66, 1010, 1515, 2121, 2828, 3636, 4545 and ti=12i(i+1)t​i​​=​2​​1​​i(i+1), are called half-consecutive. For given NN, find the smallest rr which is no smaller than NN such

Mr_Treeeee的博客 519

2017 ICPC 乌鲁木齐现场赛 A Coin ACM-ICPC 2017 Asia Urumqi(概率dp)

题目链接 Alice and Bob are playing a simple game. They line up a row of nnn identical coins, all with the heads facing down onto the table and the tails upward. For exactly mmm times they select any k o...

咸鱼有梦想 1095

2017acm/icpc乌鲁木齐站赛后总结

距离比赛结束两周了,补完作业和各种乱七八糟的东西忙完,终于有时间写这个总结了。 第一次参加区域赛,两个队友也是。这次赛区是新疆(可能这辈子就去那么一次),就抱着边打比赛,边旅游的心态去了。在新疆吃吃喝喝玩玩就不说了,主要讲下比赛吧。 day0:报道。 day1:热身赛。没带模板,只A了一个线段树/技巧题,B的计算几何板子题直接扔了,A题是线段树,但是听说数据很弱,暴力就能过,D题没看。 d

坚持迟早会有收获的!!! 1406

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 Out-out-control cars

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 Out-out-control cars使一个三角形不动,移动另外一个三角形,判断能否相交#include<stdio.h> #include<math.h> #include<algorithm> using namespace std; struct node { double x1, y1; double x2, y2;

素宇的博客 327
上一篇: 武器与战术:对聚变时代太空舰队的构想
下一篇: 搬家声明
wmdcstdio
博客等级 码龄12年 76粉丝 51原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值