2019 우 객 다 교 5 차 전 A, B, C, E, F, G, H, I,

11407 단어 2019 우 객 다 교
A-digits 2
제목 링크:https://ac.nowcoder.com/acm/contest/885/A
제목 대의: n < = 100 을 제시 하고 조건 을 만족 시 키 는 정수: 1. 숫자의 합 시 n 의 배 수 를 구한다.2. 이 수 는 n 으로 나 눌 수 있다.3. 이 수 는 10000 위 를 넘 지 않 는 다.
사고방식: n 개 n, 조건 에 완벽 하 게 부합
ACCode:
int main(){
	int T;scanf("%d",&T);
	while(T--){
		int n;scanf("%d",&n);
		for(int i=1;i<=n;++i) printf("%d",n);printf("
"); } }

그러나 나 는 왜 이 코드 가 틀 렸 는 지 몰 랐 다. n 개 n 을 순서대로 더 했다.모두 100 개의 데이터 만 있 습 니 다. 저 는 모두 뛰 어 나 왔 습 니 다. 괜 찮 습 니 다. 하지만 WA 입 니 다.
#include
#include
#include
#include
#include
// srand(unsigned)time(NULL));rand();
   
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
   
#define ll long long
#define Pii pair
#define clean(a,b) memset(a,b,sizeof(a))
using namespace std;
   
const int MAXN=2e5+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const ll MOD=1e9+7;
const double PI=acos(-1.0);
const double EPS=1.0e-8;
//unsigned register
// ios::sync_with_stdio(false)
 
int B[MAXN];
 
int main(){
    //int T=100;
    int T;scanf("%d",&T);
    while(T--){
        //int n=(100-T);
        int n;scanf("%d",&n);
        if(n<10){
            printf("%d
",n); continue; } if(n==100){ for(int i=1;i<=100;++i) printf("1");printf("00
"); continue; } clean(B,0); int a=n/10,b=n%10; for(int i=1;i<=n;++i) B[i]=b; for(int i=1;i<=n;++i) B[i+1]+=a; for(int i=1;i<=n;++i){ if(B[i]/10) B[i+1]+=B[i]/10; B[i]%=10; } int top=n+1; while(B[top]/10){ B[top+1]=B[top]/10; B[top]%=10; ++top; } for(int i=top;i>=1;--i) printf("%d",B[i]);printf("
"); } }

B-generator 1
제목 링크:https://ac.nowcoder.com/acm/contest/885/B
10 을 밑 으로 하 는 행렬 의 빠 른 속도:https://blog.csdn.net/henucm/article/details/98492753
C-generator 2
제목 링크:https://ac.nowcoder.com/acm/contest/885/C
수론 동료:https://blog.csdn.net/henucm/article/details/99682328
E-independent set 1
제목 링크:https://ac.nowcoder.com/acm/contest/885/E
문 이 적은 비트 압축 DP:https://blog.csdn.net/henu_1710252529/article/details/102639844
F-maximum clique 1
제목 링크:https://ac.nowcoder.com/acm/contest/885/F
제목 대의: n 개의 수, 하나의 최대 수의 집합 을 선택 하여 집합 내 임 의 두 개의 수 사이 에 적어도 두 개의 숫자 가 다르다.이 집합의 최대, 출력 점 을 구하 세 요.
사고방식: 임의의 두 개의 수가 가장 많 고 한 명의 서로 다른 수 연 변 을 강제로 2 분 도 를 만들어 서 자리수 의 짝 에 따라 두 개의 점 집 으로 구분한다.이분 도 일치.얻 은 일치 수량 이 가장 큰 점 집합 입 니 다.경 로 를 찾 는 데 있어 서 우 리 는 최대 흐름 을 달 린 후에 남 은 잔류 네트워크 에서 출발점 부터 찾 을 수 있 는 모든 것 이 전적 중의 점 이다.
ACCode:
#include
#include
#include
#include
#include
// srand(unsigned)time(NULL));rand();
   
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
   
#define ll long long
#define PII pair
#define PLL pair
#define clean(a,b) memset(a,b,sizeof(a))
using namespace std;
   
const int MAXN=5e3+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const ll MOD=1e9+7;
const double PI=acos(-1.0);
const double EPS=1.0e-8;
//unsigned register
// ios::sync_with_stdio(false)
 
struct Node{
    int v,val,nxt;
    Node(int _v=0,int _val=0,int _nxt=0){
        v=_v;val=_val;nxt=_nxt;
    }
};
Node Edge[MAXN*100];
int Head[MAXN],Cur[MAXN],Ecnt;
int Dis[MAXN];
int Vis[MAXN],Belong[MAXN];
int A[MAXN];
int Ans[MAXN],tot;
int n,S,T;
 
void Intt(){
	clean(Head,-1);Ecnt=0;
}
void AddEdge(int u,int v,int val){
    Edge[Ecnt]=Node(v,val,Head[u]);
    Head[u]=Ecnt++;
}
int Judge(int a,int b){
    a^=b;
    if((a&(a-1))==0) return 1;
    return 0;
}
int SA(int a){
    int Cnt=0;
    while(a){
        if(a&1) Cnt++;
        a>>=1;
    }return Cnt&1;
}
int BFS(){
    clean(Dis,-1);Dis[S]=0;
    queue que;que.push(S);
    while(que.size()){
        int u=que.front();que.pop();
        if(u==T) return 1;
        for(int i=Head[u];i+1;i=Edge[i].nxt){
            int v=Edge[i].v;
            if(Dis[v]==-1&&Edge[i].val>0){
                Dis[v]=Dis[u]+1;
                que.push(v);
            }
        }
    }return 0;
}
int DFS(int u,int low){
    if(u==T||low==0) return low;
    int res=0;
    for(int &i=Cur[u];i+1;i=Edge[i].nxt){
        int v=Edge[i].v;
        if(Dis[v]==Dis[u]+1&&Edge[i].val>0){
            int f=DFS(v,min(low-res,Edge[i].val));
            Edge[i].val-=f;Edge[i^1].val+=f;
            res+=f;
            if(res==low) break;
        }
    }return res;
}
int Dinic(){
    int Ans=0;
    while(BFS()){
        for(int i=0;i<=T;++i) Cur[i]=Head[i];
        Ans+=DFS(S,INF32);
    }return Ans;
}
void DFSPath(int u,int fa=-1){
    Vis[u]=1;
    for(int i=Head[u];i+1;i=Edge[i].nxt){
        int v=Edge[i].v;
        if(Edge[i].val==0||v==fa||Vis[v]==1) continue;
		DFSPath(v,u);
    }
}
int main(){
    Intt();scanf("%d",&n);
    for(int i=1;i<=n;++i) scanf("%d",&A[i]);
    for(int i=1;i<=n;++i){
        for(int j=i+1;j<=n;++j){
            if(Judge(A[i],A[j])){
                int x=SA(A[i]),y=SA(A[j]);
                if(x==1&&y==0){
                    AddEdge(i,j,1);AddEdge(j,i,0);
                    //printf(" %d %d
",A[i],A[j]); } else if(x==0&&y==1){ AddEdge(j,i,1);AddEdge(i,j,0); //printf(" %d %d
",A[i],A[j]); } } } }S=0;T=n+1; for(int i=1;i<=n;++i){ if(SA(A[i])){ Belong[i]=1; AddEdge(S,i,1);AddEdge(i,S,0); } else{ Belong[i]=2; AddEdge(i,T,1);AddEdge(T,i,0); } } int MaxLow=Dinic(); printf("%d
",n-MaxLow); DFSPath(S); // for(int i=1;i<=n;++i){ // printf("A[i]=%d Vis=%d Belong%d
",A[i],Vis[i],Belong[i]); // } tot=0; for(int i=1;i<=n;++i){ if(Belong[i]==1&&Vis[i]==1) Ans[++tot]=A[i]; else if(Belong[i]==2&&Vis[i]==0) Ans[++tot]=A[i]; } for(int i=1;i<=tot;++i) printf("%d ",Ans[i]);printf("
"); } /* 6 4 3 8 2 6 5 */

G-subsequence 1
제목 링크:https://ac.nowcoder.com/acm/contest/885/G
수론 동료:https://blog.csdn.net/henucm/article/details/98518989
H-subsequence 2
제목 링크:https://ac.nowcoder.com/acm/contest/885/H
제목: 길이 가 n 인 숨겨 진 문자열 입 니 다. 매번 두 자 모 를 표시 하고 원래 의 문자열 을 구 할 수 있 습 니 다.
사고방식: 표 시 된 자모 로 순서대로 토폴로지 그림 을 만 들 것 이다.토폴로지 정렬 을 진행 하 다.같은 문자 의 다른 수량 도 구분 해 야 한다.토폴로지 정렬 을 직접 하면 됩 니 다.
ACCode:
#include
#include
#include
#include
#include
// srand(unsigned)time(NULL));rand();
     
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
     
#define ll long long
#define PII pair
#define PLL pair
#define clean(a,b) memset(a,b,sizeof(a))
using namespace std;
     
const int MAXN=1e6+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const ll MOD=1e9+7;
const double PI=acos(-1.0);
const double EPS=1.0e-8;
//unsigned register
// ios::sync_with_stdio(false)
 
struct Node{
    int v,nxt;
    Node(int _v=0,int _nxt=0){
        v=_v;nxt=_nxt;
    }
};
Node Edge[MAXN<<2];
int Head[MAXN<<2],Ecnt;
int InDeg[MAXN<<2];
PII Pos[MAXN];
map CI;int Icnt;//    ,ch       int
map IC;
char S[MAXN];
int Ans[MAXN<<2],tot;
int n,m;
 
void Intt(){
    clean(Head,-1);Ecnt=0;
    clean(InDeg,0);
    Icnt=0;
    for(int i=0;i<26;++i){
        for(int j=1;j<=n;++j){
            CI[make_pair(i,j)]=++Icnt;
            IC[Icnt]='a'+i;
        }
    }tot=0;
}
void AddEdge(int u,int v){
    Edge[Ecnt]=Node(v,Head[u]);
    Head[u]=Ecnt++;
}
void Solve(){
    queue que;
    for(int i=1;i<=tot;++i){
        if(InDeg[Ans[i]]==0) que.push(Ans[i]);
    }tot=0;
    while(que.size()){
        int u=que.front();que.pop();
        Ans[++tot]=u;
        for(int i=Head[u];i+1;i=Edge[i].nxt){
            int v=Edge[i].v;
            --InDeg[v];
            if(InDeg[v]==0) que.push(v);
        }
    }
}
int main(){
    scanf("%d%d",&n,&m);Intt();
    for(int i=1;i<=m;++i){
        for(int j=i+1;j<=m;++j){
            int len;scanf("%s%d",&S,&len);//
            if(len==0) continue;//         !!! 
            char a=S[0],b=S[1];
            int cnta=0,cntb=0;
            scanf("%s",&S);
            for(int k=0;k

I-three points 1
제목 링크:https://ac.nowcoder.com/acm/contest/885/I
제목 대의: 높이 가 h 이 고 너비 가 w 인 사각형 에 세 변 을 넣 어 각각 a, b, c 의 삼각형 으로 한 조 의 정점 을 출력 합 니 다 (정점 순 서 를 주의 하 세 요)
사고방식: 세 가지 가 임의의 위치 에 있다.
ACCode:
#include
#include
#include
#include
#include
// srand(unsigned)time(NULL));rand();
     
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
     
#define ll long long
#define PII pair
#define PLL pair
#define PDI pair
#define clean(a,b) memset(a,b,sizeof(a))
using namespace std;
     
const int MAXN=1e4+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const ll MOD=1e9+7;
const double PI=acos(-1.0);
const double EPS=1.0e-10;
//unsigned register
// ios::sync_with_stdio(false)
 
struct Point{
    double x,y;
    Point(double _x=0,double _y=0){
        x=_x;y=_y;
    }
};
Point A,B,C;
double l[5];
double W,H;
 
double GetAng(double a,double b,double c){
    double ans=a*a+b*b-c*c;
    ans/=(2.0*a*b);
    return acos(ans);
}
int InRec(Point X){
    if(X.x>-EPS&&X.x-EPS&&X.y

좋은 웹페이지 즐겨찾기