60分求助

P4305 [JLOI2011] 不重复数字

@[tangguo917](/user/926434) 没学过
by Crystal_Rose @ 2024-08-15 14:20:32


@[Crystal_Rose](/user/1194487) 按照题意,你应该开到 $2147483647$,但这显然是开不了这么大的,解决办法是使用 `map`
by lianchanghua @ 2024-08-15 14:21:21


@[lianchanghua](/user/564475) 6
by Crystal_Rose @ 2024-08-15 14:21:44


@[lianchanghua](/user/564475) 直接开map会T飞的,要用unordered_map加快读
by xiexinxin @ 2024-08-15 14:23:24


@[Crystal_Rose](/user/1194487) 所以,代码可以修改成: ```cpp #include<bits/stdc++.h> using namespace std; long long b,n,m; int main(){ cin>>b; for(int i=1;i<=b;i++){ map<int,bool>a; cin>>n; for(int j=1;j<=n;j++){ cin>>m; if(!a[m]){ cout<<m<<" "; a[m]=1; } } cout<<endl; } return 0; } ```
by lianchanghua @ 2024-08-15 14:23:37


@[Crystal_Rose](/user/1194487) 但,你又会很惊奇的发现,T 掉了,这时候,把 `map` 改成 `unordered_map`
by lianchanghua @ 2024-08-15 14:24:45


@[Crystal_Rose](/user/1194487) 最后还是逃脱不了 TLE 的命运,所以我们可以继续卡常,加上快读快写,即可通过此题: ```cpp #include<bits/stdc++.h> #define int long long using namespace std; int b,n,m; inline int read(){ int w=0,f=1; char c;c=getchar_unlocked(); while(!(c>='0'&&c<='9')&&!(c=='-'))c=getchar_unlocked(); if(c=='-')f=-1,c=getchar_unlocked(); while(c>='0'&&c<='9'){ w=w*10+c-'0'; c=getchar_unlocked(); } return w*f; } void write(int x){ if(x<0)x=-x,putchar('-'); if(x>9)write(x/10),putchar(x%10+'0'); if(x<=9)putchar(x+'0'); } signed main(){ b=read(); for(int i=1;i<=b;i++){ unordered_map<int,bool>a; n=read(); for(int j=1;j<=n;j++){ m=read(); if(!a[m]){ write(m); putchar(' '); a[m]=1; } } putchar('\n'); } return 0; } ```
by lianchanghua @ 2024-08-15 14:26:58


话说,我是不是有点太魔怔了/kk
by lianchanghua @ 2024-08-15 14:27:31


@[xiexinxin](/user/926978) 啊对对对
by lianchanghua @ 2024-08-15 14:27:54


@[lianchanghua](/user/564475) 6
by Crystal_Rose @ 2024-08-15 14:28:22


上一页 | 下一页