1. 程式人生 > 實用技巧 >python 判斷一個資料夾下的所有檔案,去除字尾,在另一個目錄中能否找到,找不到就把這個檔案刪除

python 判斷一個資料夾下的所有檔案,去除字尾,在另一個目錄中能否找到,找不到就把這個檔案刪除

div3真好啊 養老

A. Boring Apartments 直接模擬

B. Yet Another Bookshelf 模擬

C. Dominant Piranha 不會

D. Districts Connection 模擬,按樹每個deep去分層連就行了

#include<bits/stdc++.h>
#define fi first
#define se second
#define io std::ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
typedef pair<int
,int> pii; const int P = 1e9+7, INF = 0x3f3f3f3f; ll gcd(ll a,ll b){return b?gcd(b,a%b):a;} ll qpow(ll a,ll n){ll r=1%P;for (a%=P; n; a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;} const int maxn=3e5+10; int a[maxn]; int pre[maxn]; int suf[maxn]; int id[maxn]; bool cmp(int x,int y) { return a[x]<a[y]; }
int main() { int t; cin>>t; while(t--) { int n; cin>>n; int flag=1; int s; for(int i=1;i<=n;i++) {cin>>a[i]; if(a[i]!=a[i-1]&&i!=1) { flag=0; } id[i]=i; } if(flag) cout<<"
NO"<<endl; else { cout<<"YES"<<endl; sort(id+1,id+1+n,cmp); /*for(int i=1;i<=n;i++) cout<<id[i]<<' '; cout<<endl;*/ int root=id[1]; for(int i=2;i<=n;i++) { if(a[id[i]]!=a[root]) {s=i;break;} } for(int i=s;i<=n;i++) { if(a[id[i]]!=a[id[i-1]]&&i!=s) root=id[i-1]; cout<<root<<' '<<id[i]<<endl; } root=id[n]; for(int i=2;i<s;i++) { cout<<root<<' '<<id[i]<<endl; } } } }

E. Two Round Dances 不會

F. Zero Remainder Sum 四維DP (複雜度其實是五維?)

開個dp[i][j][t][p] i代表第幾行 j代表當前dp到第幾列 t代表當前選了多少個,然後p代表餘數,dp[i][j][t][p]就是第i行 到j列時,選個t個數,這些數%k的餘數是p的最大值

然後dp就行了

dp完了統計一下答案 再按行dp一下就行了 f[i][p] 同理,i是第i行 p是餘數 所以最後答案是f[n][0]

#include<bits/stdc++.h>
#define fi first
#define se second
#define io std::ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+7, INF = 0x3f3f3f3f;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n){ll r=1%P;for (a%=P; n; a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
const int maxn=3e5+10;
int a[80][80];
int pre[maxn];
int suf[maxn];
int id[maxn];
int dp[80][80][80][80];
int f[80][80];
int main()
{


    
         int n,m,k;

     cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++) cin>>a[i][j];
    for(int i=1;i<=n;i++)
      {
         for(int j=1;j<=m;j++)
         {
           
           int v=a[i][j];
           for(int jj=0;jj<j;jj++)
            for(int t=0;t<=jj;t++)
            { if(t+1>m/2)
              break;
              for(int p=0;p<k;p++)
              {   if(p>0&&dp[i][jj][t][p]==0) continue;
                  dp[i][j][t+1][(p+v)%k]=max(dp[i][j][t+1][(p+v)%k],dp[i][jj][t][p]+v);
                  //printf("%d %d %d %d  %d\n",i,j,t+1,(p+v)%k,dp[i][j][t+1][(p+v)%k]);
              }

            }
         }
         for(int p=0;p<k;p++)
         for(int j=1;j<=m;j++)
         {
            for(int t=0;t<=m/2;t++)
            {
                dp[i][0][0][p]=max(dp[i][0][0][p],dp[i][j][t][p]);
            }
         }
      }
     /*for(int i=1;i<=n;i++)
      {

        for(int j=0;j<k;j++)
          cout<<dp[i][0][0][j]<<' ';
        cout<<endl;
      }*/
    for(int i=1;i<=n;i++)
    {
           for(int p1=0;p1<k;p1++)
           {
              for(int p2=0;p2<k;p2++)
              {      if(p2>0&&f[i-1][p2]==0)
                         continue;
                      if(p1>0&&dp[i][0][0][p1]==0) continue;
                    f[i][(p1+p2)%k]=max(f[i][(p1+p2)%k],dp[i][0][0][p1]+f[i-1][p2]);
              }
           }
          /*for(int p=0;p<k;p++)
            cout<<f[i][p]<<' ';
          cout<<endl;*/
    }
    cout<<f[n][0]<<endl;
}

G. Reducing Delivery Cost 最短路板子題

先把那k個route給跑完 求出最短路,(正著跑一邊倒著跑一邊)

然後這樣列舉刪去那個邊然後每次更新就行了(你要記錄每次跑完的最短路)

複雜度(2*k*m*logn+m*k) k*m*logn這個是跑2k次最短路 m*k是列舉每條邊然後更新的複雜度

#include<bits/stdc++.h>
#define fi first
#define se second
#define io std::ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+7, INF = 0x3f3f3f3f;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n){ll r=1%P;for (a%=P; n; a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
const int maxn=1e3+10;
  int n,m,k;
vector<int> G[maxn];
ll d[maxn][maxn][2];
ll dis[maxn][maxn];
void djs(int s,int id,int f)
{
    priority_queue<pii,vector<pii>,greater<pii> > que;
    for(int i=1;i<=n;i++)
    {
        d[id][i][f]=INF;
    }
  //  memset(d,INF,sizeof(d));
    d[id][s][f]=0;
    que.push(make_pair(0,s));
    while(!que.empty())
    {
        pii p=que.top();
        que.pop();
        int v=p.second;
        if(d[id][v][f]<p.first)continue;
        for(int i=0; i<G[v].size(); i++)
        {
            int to=G[v][i];
            if(d[id][to][f]>d[id][v][f]+dis[to][v])
            {
                d[id][to][f]=d[id][v][f]+dis[to][v];
                que.push(make_pair(d[id][to][f],to));
            }
        }
    }
}
vector<pii> aa;
vector<pii> g;
ll dd[maxn];
int main()
{


    cin>>n>>m>>k;
    for(int i=1;i<=m;i++)
    {
        int x,y,z;
        cin>>x>>y>>z;
        dis[x][y]=dis[y][x]=z;
        G[x].push_back(y);
        G[y].push_back(x);
        g.push_back({x,y});
    }
    for(int i=1;i<=k;i++)
    {
        int x,y;
        cin>>x>>y;
        aa.push_back({x,y});
        djs(x,i,0);
        djs(y,i,1);
        dd[i]=d[i][y][0];

    }
    ll _min=1e18;
    for(auto i:g)
    {
        ll t=0;
        int x=i.fi;
        int y=i.se;
        for(int j=1;j<=k;j++)
        {
            t+=min(d[j][x][0]+d[j][y][1],min(dd[j],d[j][x][1]+d[j][y][0]));
        }
        _min=min(t,_min);
    }
    cout<<_min<<endl;
}