昨晚div2被狠狠拿下了,A题急了wa了一发,加10min罚时:( ,然后B题贪心模拟wa2,不想做了就run了。
星期一:
补道div2看了但没做的C题:
题意:自行理解
思路:gcd,但我第一次算成了所有a的gcd,然后wa2,实际上是求所有差值的gcd。
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;
const int N=2e5+10,M=1e9+10;
const int mod=998244353;
int n;
ll a[N],gc,aa;
ll ans;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
void solve(){
gc=ans=0;
cin >> n;
for(int i=1;i<=n;i++){
cin >> a[i];
}
sort(a+1,a+n+1);
if(a[1]<0) for(int i=n;i;i--) a[i]-=a[1];
gc=a[n]-a[1];
for(int i=1;i<n;i++) gc=gcd(a[i+1]-a[i],gc);
// cout << gc << endl;//
// for(int i=1;i<=n;i++) cout << a[i] << " ";cout << endl;//
for(int i=n-1;i;i--){
if(a[i+1]-a[i]!=gc){aa=a[i+1]-gc,ans+=(a[n]-aa)/gc; break;}
}
// cout << aa << endl << ans << endl;//
if(!ans) ans+=n;
for(int i=1;i<n;i++){
ans+=(a[n]-a[i])/gc;
}
cout << ans << endl;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t=1;
cin >> t;
while(t--) solve();
return 0;
}
//make it count
//开ll plz
明天离散要教dijkstra最短路算法,遂又复习了一遍,上次听正义讲学会了代码怎么写,这次自己看了点文章,对其原理又加深了几分理解,明早准备享受,不过也希望通过老师的讲解领悟到新的东西。
星期二:
下午和李和强vp了场23年江西,签到题是真的签到,但签完到又被卡住了。补俩题:
K题:
题意:自行理解
思路:修改操作对答案无影响,先求差分,将其排序求前缀和,但这里代码没写过,没懂。
星期四来写,发现咋没星期三的?我昨天干了些啥,怎么回忆不起来了?
星期四:
下午在做pta,晚上困死了,一直在睡觉,然后写词频统计没写完,明早再来继续。
星期五:
题意:如题
思路:初见的时候都懵了,后来想到用优先队列,在写的时候又反应过来直接vector存结构体,然后排个序就行,不过写着还是挺麻烦的,为此学了个结构体运算符重载,和cin.get()的输入方式(可以检测空格),和输出vector内结构体数据。
代码如下:
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;
const int N=1e6+10,M=1e9+10;
const int mod=998244353;
struct nod{
string wd;
int cnt;
bool operator<(const nod& a) const{
if(a.cnt!=cnt) return a.cnt<cnt;
else return a.wd.compare(wd)>0;
}
bool operator==(const string &w) const{
return this->wd==w;
}
};
int n;
string s;
vector<nod>ve;
char trans(char a){
if(a>='A' && a<='Z') a-='A'-'a';
return a;
}
void solve(){
char c;
while(cin.get(c) && c!='#'){
c=trans(c);
if((c>='a' && c<='z') || (c>='0' && c<='9') || c=='_'){
if(s.size()>14) continue;
s+=c;
}else{
if(s.size()){
vector<nod>::iterator it=find(ve.begin(),ve.end(),s);
if(it!=ve.end()) (*it).cnt++;
else ve.push_back({s,1});
s.clear();
}
}
}
if(s.size()){
vector<nod>::iterator it=find(ve.begin(),ve.end(),s);
if(it!=ve.end()) (*it).cnt++;
else ve.push_back({s,1});
s.clear();
}
sort(ve.begin(),ve.end());
int cnt=0;
cout << ve.size() << endl;
for(vector<nod>::iterator it=ve.begin();cnt<(int)ve.size()/10;cnt++,it++){
cout << (*it).cnt << ":" << (*it).wd << endl;
}
// for(vector<nod>::iterator it=ve.begin();it!=ve.end();it++){
// cout << (*it).cnt << ":" << (*it).wd << endl;
// }
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
// cin >> _;
while(_--) solve();
return 0;
}
//make it count
//开ll plz
晚上看了点蓝桥杯真题。
星期六:
蓝桥杯校赛被腐乳了,15名,有点失望。明天晚上会讲题,到时候补。
周日:
去成信大打了场他们学校校赛,发挥一般,也没啥好说的,倒是有道题可以补补,不过还不到找得到不。
听了校赛题解,yysy我觉得出的比成信大的题好,补补。
然后省赛前最后一周,准备恶补点图论,其次dp,虽然dp主要还是看强。
又看了遍已经忘了的链式前向星存图。
用链式前向星手打了一遍迪杰斯特拉,舒畅。水点字数,板子放下面(
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using PII=pair<int,int>;
const int N=2e5+10,M=1e5+10;
const int mod=998244353;
int n,m,s;
struct nod{
int nex,to,w;
}eg[N];
int hd[N],cnt,dis[N];
bool vi[N];
void add(int u,int v,int w){
eg[++cnt].to=v;
eg[cnt].w=w;
eg[cnt].nex=hd[u];
hd[u]=cnt;
}
void dij(){
priority_queue<PII,vector<PII>,greater<PII>>pq;
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
pq.push({0,s});
while(pq.size()){
int t=pq.top().second,d=pq.top().first;pq.pop();
if(vi[t]) continue;
vi[t]=1;
for(int i=hd[t];i;i=eg[i].nex){
if(d+eg[i].w<dis[eg[i].to]){
dis[eg[i].to]=d+eg[i].w;
pq.push({dis[eg[i].to],eg[i].to});
}
}
}
}
void solve(){
cin >> n >> m >> s;
for(int i=1;i<=m;i++){
int u,v,w;
cin >> u >> v >> w;
add(u,v,w);
}
dij();
for(int i=1;i<=n;i++) cout << dis[i] << " ";
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
// cin >> _;
while(_--) solve();
return 0;
}
//make it count
//开ll plz