英特爾 27.20.100.8783 顯示卡驅動釋出:支援 11 代酷睿 Xe 核顯
阿新 • • 發佈:2020-10-01
C - From S To T
給一個圖,‘.’表示白色,‘*’表示黑色,一次填充使一個白色變成黑色,找出缺少黑色最少的行列
記錄每一行,每一列白色的個數,迴圈找出行列和最小的那一組
#include <bits/stdc++.h> using namespace std; int main() { string a[50010]; int t; cin>>t; while(t--) { int h[50010]= {0},l[50010]= {0}; int n,m,i,j; cin>>n>>m;for(i=0; i<n; i++) { cin>>a[i]; for(j=0; j<m; j++) { if(a[i][j]=='.') { h[i]++; } } } for(j=0; j<m; j++) { for(i=0; i<n; i++) {if(a[i][j]=='.') { l[j]++; } } } int ans=0,minn=999999; for(i=0;i<n;i++){ for(j=0;j<m;j++){ if(a[i][j]=='.') { ans=-1; }else{ ans=0; } minn=min(h[i]+l[j]+ans,minn); } } cout<<minn<<endl; } }
F - Coffee Break
某人要在n天內喝n杯咖啡,每杯咖啡都要在一天特定的時間喝掉,如果兩杯咖啡在一天喝,那麼它們之間至少要相隔dmin,要求輸出最少幾天可以喝完,並輸出對應題目輸入的每一杯咖啡是在第幾天喝的
#include <bits/stdc++.h> using namespace std; int a[100100],b[100100]; set<pair<int,int> >se; int main() { int n,m,d,i; cin>>n>>m>>d; for(i=0;i<n;i++){ cin>>a[i]; se.insert(make_pair(a[i],i)); } int cnt=0,pos; while(!se.empty()){ pos =se.begin()->second; b[pos]=++cnt; se.erase(se.begin()); while(1){ auto t=se.lower_bound({a[pos]+d+1,0}); //lower_bound(begin,end,i)用法是查詢排好序的從begin開始到end結束不大於i的數,二分查詢方法 if(t==se.end()) break; pos=t->second; b[pos]=cnt; se.erase(t); } } cout<<cnt<<endl; cout<<b[0]; for(i=1;i<n;i++){ cout<<' '<<b[i]; } return 0; }