/* 第一次寫codeforce的題解 以前一直拿它來練手速 前幾天發如今好好施展一場就能到藍名了 剛好碰上一場div3 灰常開心 而後只作了2題 如今改一改CE題 C - Maximal Intersection 這題一開始想麻煩了 想的是分有n和沒有n討論 比賽的時候少考慮了一種而後wa....... 其實 考慮n條線段的交 就是minr-maxl 那麼咱們枚舉刪掉那一個 而後剩下的按上面的方法求一下 藉助set 由於要支持刪除一個元素 而且有重複要用multiset 另外multiset用的很少剛纔wa了好幾發..... end這個迭代器指的應該是最後一個元素 rbegin纔是最後一個 */ #include<cstdio> #include<cstring> #include<iostream> #include<set> #define maxn 300010 using namespace std; int n,l[maxn],r[maxn],ans; int main(){ scanf("%d",&n);multiset<int>L,R; for(int i=1;i<=n;i++){ scanf("%d%d",&l[i],&r[i]); L.insert(l[i]);R.insert(r[i]); } for(int i=1;i<=n;i++){ L.erase(L.find(l[i]));R.erase(R.find(r[i])); ans=max(ans,*R.begin()-*L.rbegin()); L.insert(l[i]);R.insert(r[i]); } printf("%d\n",ans); return 0; } /* D題 字符串拼接的操做就是前一個*10^len2 + 後一個數 正着枚舉兩個(a+b)%k==0 <-> (a%k+b%k)%k==0 咱們只枚舉a 構造出b來 看看符合條件的b有幾個 必須位數和%k的餘數都符合條件才行 而後預處理下f[i][j]是i位數中%k餘j的數的個數 map加了一個log因此比較慢 改改%longlong啥的優化常數卡過去了 */ #include<cstdio> #include<cstring> #include<iostream> #include<cstdlib> #include<map> #define maxn 200010 #define ll unsigned long long using namespace std; int n,k,r,now,tmp,a[maxn]; ll ans; const ll P=10; map<int,int>f[12]; int Get(ll x){ int res=0; while(x){ res++;x/=10; } return res; } int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); int c=Get(a[i]);f[c][a[i]%k]++; } for(int i=1;i<=n;i++){ now=Get(a[i]);int c=a[i]*P%k,pre=a[i]%k; for(int j=1;j<=10;j++){ tmp=k-c;if(tmp>=k)tmp-=k; ans+=f[j][tmp]; if(j==now&&tmp==pre) ans--;c=c*P%k; } } printf("%lld\n",ans); return 0; }